проблема с многостабличным полнотекстовым запросом mysql?

#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'