[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: SQL запрос
zhenia3003
Правильно ли составлен 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
Цитата
Смущает плюс между 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
+ уберите

Почитай об nested IF

http://komlenic.com/254/mysql-nested-if-in-select-queries/
depp
Oyeme
а по моему у автора более изящное решение, чем куча вложенных if.
Oyeme
Цитата (depp @ 22.03.2017 - 08:46)
Oyeme
а по моему у автора более изящное решение, чем куча вложенных if.

Не заметил что он складыает числа,показалось что хочет сделатьконкатинацию строк if, else.
Тогда все верно сделано.
zhenia3003
Да, складываю числа из массива IF (для сортировки по этим числам), реализую таким образом поиск, но он медленно работает при подгрузке через ajax, возможно есть какое-нибудь более интересное решение???
Valick
Цитата (zhenia3003 @ 22.03.2017 - 13:00)
возможно есть какое-нибудь более интересное решение?

я думал не спросишь...
полнотекстовый поиск, самое что ни на есть решение

_____________
Стимулятор ~yoomoney - 41001303250491
zhenia3003
У меня на локальном сервере mysql 5.6-5.7 вылетает ошибка при sql запросе

ALTER TABLE `table` ADD FULLTEXT (
`text`
);

Прекращена работа программы mysqld.exe, в чем может быть проблема?
zhenia3003
#2006 - MySQL server has gone away
depp
тип таблицы какой?
zhenia3003
InnoDB, с 5.6 версии туда добавили полнотекстовый поиск вроде
zhenia3003
Скачал другую сборку виртуального сервера, удалось добавить полнотекстовый индекс, но вот новая проблема, подскажите почему, если в MATCH(title) указать одно поле, например title поиск работает, а с двумя полями нет? Вот sql запрос

SELECT * FROM `table` WHERE MATCH (title, text) AGAINST ('Поисковая фраза')
Valick
zhenia3003, фултекст должен быть на оба поля, и не забывайте про обратные слеши в названиях таблиц и полей, text - это зарезервированное слово, без слешей СУРБД не знает что вы так обозвали своё поле и воспринимает написанное как конструкцию самого языка
по поводу сервера используйте ОпенСервер

_____________
Стимулятор ~yoomoney - 41001303250491
zhenia3003
Спасибо за подсказку насчет оба поля, создал одним запросом и заработало

ALTER TABLE `table` ADD FULLTEXT(`title`,`text`);

А до этого добавлял индекс по одному полю.
Что касаемо ошибки, она появлялась на ОпенСервер обычная версия, поставил расширенную и заработало
zhenia3003
Еще вопрос, почему результаты поиска MATCH AGAINST разные с LIMIT и без него?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.