zhenia3003
22.03.2017 - 12:32
Правильно ли составлен SQL запрос? Смущает плюс между IF, в документации ничего не нашел про плюс
$search = "слово";
$query = "SELECT *, (IF (`title` LIKE '%".$search."%', 60, 0) + IF (`text` LIKE '%".$search."%', 10, 0)) AS `relevant`
FROM `table`
WHERE (`title` LIKE '%".$search."%' OR `text` LIKE '%".$search."%')
ORDER BY `relevant` DESC";
Игорь_Vasinsky
22.03.2017 - 12:36
Цитата |
Смущает плюс между IF, в документации ничего не нашел про плюс |
если не нашёл, чё пишешь?
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Oyeme
а по моему у автора более изящное решение, чем куча вложенных if.
Цитата (depp @ 22.03.2017 - 08:46) |
Oyeme а по моему у автора более изящное решение, чем куча вложенных if. |
Не заметил что он складыает числа,показалось что хочет сделатьконкатинацию строк if, else.
Тогда все верно сделано.
zhenia3003
22.03.2017 - 14:00
Да, складываю числа из массива IF (для сортировки по этим числам), реализую таким образом поиск, но он медленно работает при подгрузке через ajax, возможно есть какое-нибудь более интересное решение???
Valick
22.03.2017 - 14:55
Цитата (zhenia3003 @ 22.03.2017 - 13:00) |
возможно есть какое-нибудь более интересное решение? |
я думал не спросишь...
полнотекстовый поиск, самое что ни на есть решение
_____________
Стимулятор ~yoomoney - 41001303250491
zhenia3003
22.03.2017 - 15:20
У меня на локальном сервере mysql 5.6-5.7 вылетает ошибка при sql запросе
ALTER TABLE `table` ADD FULLTEXT (
`text`
);
Прекращена работа программы mysqld.exe, в чем может быть проблема?
zhenia3003
22.03.2017 - 15:23
#2006 - MySQL server has gone away
zhenia3003
22.03.2017 - 16:16
InnoDB, с 5.6 версии туда добавили полнотекстовый поиск вроде
zhenia3003
22.03.2017 - 17:18
Скачал другую сборку виртуального сервера, удалось добавить полнотекстовый индекс, но вот новая проблема, подскажите почему, если в MATCH(title) указать одно поле, например title поиск работает, а с двумя полями нет? Вот sql запрос
SELECT * FROM `table` WHERE MATCH (title, text) AGAINST ('Поисковая фраза')
Valick
22.03.2017 - 17:27
zhenia3003, фултекст должен быть на оба поля, и не забывайте про обратные слеши в названиях таблиц и полей, text - это зарезервированное слово, без слешей СУРБД не знает что вы так обозвали своё поле и воспринимает написанное как конструкцию самого языка
по поводу сервера используйте ОпенСервер
_____________
Стимулятор ~yoomoney - 41001303250491
zhenia3003
22.03.2017 - 17:44
Спасибо за подсказку насчет оба поля, создал одним запросом и заработало
ALTER TABLE `table` ADD FULLTEXT(`title`,`text`);
А до этого добавлял индекс по одному полю.
Что касаемо ошибки, она появлялась на ОпенСервер обычная версия, поставил расширенную и заработало
zhenia3003
22.03.2017 - 18:31
Еще вопрос, почему результаты поиска MATCH AGAINST разные с LIMIT и без него?