2015-10-09 6 views
-1

Я пытаюсь создать запрос, в котором вся таблица будет искать строку, в этом случае любую строку. Запрос должен возвращать строки, где выполняются все условия. Ядром базы данных является InnoDB. $keywordse - массив, содержащий литеральные строки. Это мой код:Таблица поиска для строк

SELECT id, autorid, autor, date, longitude, latitude, title, text, town, time 
FROM posts 
WHERE MATCH (title, text, town) AGAINST (" . implode(",",$keywordse) . ") 
AND 
(
    longitude >= $loo and longitude <= $lo 

OR 
    latitude >= $laa and latitude <= $la 
) 
ORDER BY id DESC 
+0

Погрешность довольно ясна - неопределенная переменная. Из кода, который вы используете, невозможно определить, как/когда/если вы его определили. –

+0

Да, вы правы, я меняю это, и теперь только результат показанного запроса не задан. – Bodoppels

+0

"* Я пытаюсь создать запрос *" - Где вы строите этот запрос? Предложение 'WHERE' содержит' ... название, текст, город LIKE ... '; Это даже верно? –

ответ

0

Я немного запутался по этой линии в запросе

WHERE * LIKE (" . implode(",",$keywordse) . ") 

Я сомневаюсь, что вы можете использовать оператор * здесь. Попробуйте заменить его полем, в котором вы пытаетесь найти строку. Как автор, текст или заголовок в вашем случае.

ОБНОВЛЕНО: В MySQL есть индекс FULLTEXT. https://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

После добавления такого индекса на полях к вашему столу вы можете легко найти в нескольких областях с

WHERE MATCH (title,autor,text) AGAINST ('keyword'); 
+0

Я хочу искать в каждом столбце строки и мысли * означает в sql "all". – Bodoppels

+0

Нет, это не так. MySQL не поддерживает его. Вам нужно указать все поля в запросе. –

+0

О, хорошо, я пробую! :) – Bodoppels

Смежные вопросы