#php #mysql #full-text-search
#php #mysql #полнотекстовый поиск
Вопрос:
Я создаю многостабличный полнотекстовый запрос.Но я столкнулся с некоторым вопросом. Мне нужно создать запрос типа
(SELECT
title,content,date,cat
FROM article1
WHERE
cat='Science fiction'
AND
MATCH (title,content)
AGAINST
(' Harry Potter' IN BOOLEAN MODE))
UNION
(SELECT
title,content,date
FROM article3
WHERE MATCH (title,content)
AGAINST
(' Harry Potter' IN BOOLEAN MODE))
Order By date DESC LIMIT 10
Но это вызвало Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource
Если я удалил cat='Science fiction' AND
, он может пройти тест.
В чем проблема? Если я хочу сделать запрос таким, каким я хочу: первый полнотекстовый запрос требует удовлетворения cat='Science fiction'
. Большое спасибо.
Ответ №1:
Вы пытаетесь объединить результирующие наборы, которые возвращают разное количество столбцов. Ваш первый запрос возвращает 4 столбца (заголовок, содержимое, дата, cat), в то время как ваш второй возвращает только 3 (заголовок, содержимое, дата). Каждый запрос должен возвращать одинаковое количество столбцов.
Ответ №2:
Я не знаю, почему удаление cat LIKE 'Science fiction'
заставляет запрос работать. Как написано, это не должно работать ни в том, ни в другом случае. UNION
требуется, чтобы обе части запросов выдавали одинаковое количество столбцов с совместимыми типами. У вашего UNION
есть 4 столбца в первой части и 3 столбца во второй:
SELECT title, content, date, cat FROM article1
UNION
SELECT title, content, date FROM article3
Комментарии:
1. @Joe Stefanelli, итак, как решить проблему, с которой я сталкиваюсь? Если мне нужен запрос, подобный этому.
2. @cj333: добавьте столбец cat во 2-ю часть запроса. Если в article3 нет подходящего столбца для использования, тогда используйте константу
3. @cj333: Если вам не нужен столбец cat во втором запросе, измените этот второй запрос, чтобы он был
SELECT title,content,date,NULL AS cat...
4. @Joe Stefanelli,
SELECT title,content,date,NULL AS cat...
, он может выполняться. Спасибо…
Ответ №3:
mysql_query вернул FALSE, указывая на проблему при разборе вашего запроса? Если вы слепо передали «FALSE» в mysql_fetch_array(), я бы ожидал увидеть ошибку такого рода.
Ответ №4:
попробуйте
cat LIKE 'Science fiction'