С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
1

Полнотекстовый поиск в InnoDB

25.11.2011, 20:28. Показов 2568. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем!
Пишу поисковик для себя. Тип БД InnoDB. В сети узнал, что этот тип не поддерживает полнотекстовый поиск.
Но на Хабре нашел вроде решение проблемы, привожу код оттудава
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
CREATE 
FUNCTION SEARCH(str VARCHAR(255))
  RETURNS VARCHAR(255) CHARSET cp1251
BEGIN
  DECLARE output VARCHAR(255) DEFAULT '';
  DECLARE temp_str VARCHAR(255);
  DECLARE first_part VARCHAR(255) DEFAULT "CONCAT_WS(' ',`name`,`surname`,`login`,`country`,`city`) LIKE '%";
  DECLARE last_part VARCHAR(255) DEFAULT "%'";
 
  WHILE LENGTH(str) != 0 DO    
    SET temp_str = SUBSTRING_INDEX (str, ' ', 1);
    IF temp_str = str
      THEN
        SET str = '';
      ELSE
       SET str = SUBSTRING(str, LENGTH(temp_str) + 2);
    END IF;
 
    IF output != ''
      THEN
        SET output = CONCAT(output, ' OR ');
    END IF;
 
    SET output = CONCAT(output, first_part, temp_str, last_part);
 
  END WHILE;
  RETURN output;
END
и
Функция возвращает нам фрагмент сформированного поискового запроса, который просто нужно подставить и выполнить:
SQL
1
2
3
    SET @WHERE =  CONCAT('SELECT * FROM `users` WHERE ',  SEARCH ('Хабра Хабрович'));
    PREPARE prepared FROM  @WHERE;
    EXECUTE prepared;
Подскажите пожалста, где этот код надо прописать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.11.2011, 20:28
Ответы с готовыми решениями:

Подправьте полнотекстовый поиск
Добрый вечер! В ячейке таблицы name_user, имеется запись со значением Петров. Если...

Полнотекстовый поиск по базе mysql
Всем привет. Решил сделать полнотекстовый поиск, но результат не очень удовлетворительный. Поиск...

Полнотекстовый поиск всех морфем слова
Мне нужно в базе МуСКЛ искать все морфемы введенных слов на русском языке. То есть, если...

полнотекстовый поиск
обновил до бух 3.0, пытаюсь включить полнотекстовый поиск ставлю галочку, обновляю индексы,...

11
13208 / 6597 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
26.11.2011, 08:06 2
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
Подскажите пожалста, где этот код надо прописать?
Хранимые функции и процедуры хранятся в самой БД. Один раз в БД её создали и пользуемся.
0
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
26.11.2011, 11:45  [ТС] 3
мм.. , а где именно в БД? в каком то спец. поле или таблице?
0
13208 / 6597 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
26.11.2011, 12:04 4
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
а где именно в БД? в каком то спец. поле или таблице?
Просто в базе наравне с таблицами, представлениями (view) и триггерами.
0
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
26.11.2011, 12:12  [ТС] 5
Vovan-VE, из того что написали, знаком только с таблицами.
Конкретно, вот захожу в phpMyAdmin ... и дальше куда нажать или записать?

Не по теме:

вообще то работаю не на phpMyAdmin'e



А если это все руками надо набрать, то как поступить, сохранить БД в файл и в конце добавить этот код?
0
13208 / 6597 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
26.11.2011, 12:42 6
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
Конкретно, вот захожу в phpMyAdmin ... и дальше куда нажать или записать?
Когда выбираете базу, в центре видите список таблиц. Под ним будет список процедур (в версиях 3.3.х он скорее всего сделан разворачивающимся блоком).

В экспорте базы есть галка "выдавать код процедур/функций" (сразу скажу, что в каких-то версиях phpMyAdmin'а есть баг: галка есть, но толку нет).

Также просмотреть код процедур/функций может только их создатель (он у каждой всегда задан явно) или юзер с привилегией SUPER.
0
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
26.11.2011, 13:01  [ТС] 7
Цитата Сообщение от Vovan-VE Посмотреть сообщение
Когда выбираете базу, в центре видите список таблиц. Под ним будет список процедур (в версиях 3.3.х он скорее всего сделан разворачивающимся блоком).
нету такого, там только

With selected: Check All / Uncheck All

Print view Data Dictionary
Create new table on database db
Name:
Number of fields:
1 May be approximate. See FAQ 3.11
Open new phpMyAdmin windowOpen new phpMyAdmin window

Цитата Сообщение от Vovan-VE Посмотреть сообщение
В экспорте базы есть галка "выдавать код процедур/функций" (сразу скажу, что в каких-то версиях phpMyAdmin'а есть баг: галка есть, но толку нет).
есть 2 галки в области Structure -
Add DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT
Add CREATE PROCEDURE / FUNCTION / EVENT

обе зачекал, но они не сохраняются

Версию phpMyAdmin'a не знаю, идет вместе с денвер 5.2
0
13208 / 6597 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
26.11.2011, 14:03 8
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
Версию phpMyAdmin'a не знаю, идет вместе с денвер 5.2
На самой главной странице phpMyAdmin'a последний блок с инфой о нем самом.

См. также запросы SHOW PROCEDURE STATUS, SHOW PROCEDURE CODE, SHOW FUNCTION STATUS и SHOW FUNCTION CODE.
1
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
26.11.2011, 14:44  [ТС] 9
Vovan-VE, решение для вопроса нашел, скачал прогу MySQL Query Browser. Можно было и на HeidiSQL которым и пользуюсь )
тут дальше непонятный момент, с хранимыми процедурами сталкиваюсь впервые, но понятно что первый участок кода который я привел - это сама ф-я, а второй как я понимаю поиск чека по имени "Хабра Хабрович"
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
SET @WHERE = CONCAT('SELECT * FROM `users` WHERE ', search ('Хабра Хабрович'));
PREPARE prepared FROM @WHERE;
EXECUTE prepared;
Ну а что если мне надо не его найти, и вабще у меня поисковик не для поиска юзеров (хотя и для них можно использовать. просто тестирую по новостям).
Как мне связать теперь код с формой поиска? почитал немного в сети, что обратиться к коду можно через CALL, тогда не понятен приведенный кусок кода.
Объясни пожалста, если можно
0
13208 / 6597 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
26.11.2011, 14:49 10
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
а второй как я понимаю поиск чека по имени "Хабра Хабрович"
Второй фрагмент можно оформить там же процедурой, чтобы 'Хабра Хабрович' передавалось в качестве параметра. Тогда вызов этой процедуры будет выдавать результат, как SELECT
SQL
1
CALL SearchUsers('Хабра Хабрович');
0
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
26.11.2011, 14:57  [ТС] 11
ну это тоже можно, а как это все теперь связать с пхп и главной с формой поиска, чтобы параметр в процедуру SearchUsers пердавался из формы?
и ссылки дай на лит-ру на русском, сам тоже почитаю, что к чему.
в сети нормальных вещей чет не нашел
0
13208 / 6597 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
26.11.2011, 15:13 12
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
ну это тоже можно, а как это все теперь связать с пхп
Как раньше SELECT'ы выполняли, так же теперь CALL выполняйте: mysql_query(), mysql_fetch_assoc(), mysql_free_result();
1
26.11.2011, 15:13
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.11.2011, 15:13
Помогаю со студенческими работами здесь

Полнотекстовый поиск по БД
Прошу помочь найти ошибку! Делаю полнотекстовой поиск по полям org, gorod, adres, web "colname1"...

Полнотекстовый поиск
в таблице есть поле у content(longtext) у которого индекс fulltext с таким же название в таблице...

Полнотекстовый поиск
Здравствуйте! Такой вопрос. У меня в базе данных работает полнотекстовый поиск. Как известно,...

Полнотекстовый поиск
Доброго времени суток! Пытаюсь сделать полнотекстовый поиск. Надо выполнить SQL-запрос и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru