Как искать строку в двух таблицах mysql без полнотекстовых индексов - PullRequest
2 голосов
/ 12 февраля 2010

У меня есть этот запрос для поиска какой-то строки в двух таблицах (скачать, новости) и вернуть столбец с названием title из этой записи, но что-то не так с кодом. Это просто показывает результат из второй таблицы в коде, и если я снова изменяю таблицы в коде, я получаю результат из второй таблицы!

 $sql="SELECT download.title,news.title FROM download,news WHERE download.title LIKE '%$search%' OR news.title LIKE '%$search%' OR news.text LIKE '%$search_text%' ";  

и результаты печати

while ($row = mysql_fetch_assoc($result)) {
 echo $row['title'] ."<br/>";
}

1 Ответ

0 голосов
/ 12 февраля 2010

Использование:

SELECT d.title
  FROM DOWNLOAD d
 WHERE d.title LIKE '%$search%' 
UNION 
SELECT n.title
  FROM NEWS n
 WHERE n.title LIKE '%$search%' 
    OR n.text LIKE '%$search%' 

Отправленный вами запрос создает декартово произведение, поскольку в предложении WHERE нет критериев JOIN. Этот запрос вернет список отдельных значений title на основе записей в любой таблице. Если бы не было запроса на возврат дубликатов, я бы использовал UNION ALL.

Как узнать, из какого результата таблицы?


Не зная больше о таблицах, проще всего было бы определить вычисляемый / производный столбец со статическими значениями:

SELECT d.title,
       'DOWNLOAD' AS type
  FROM DOWNLOAD d
 WHERE d.title LIKE '%$search%' 
UNION 
SELECT n.title,
       'NEWS' AS type
  FROM NEWS n
 WHERE n.title LIKE '%$search%' 
    OR n.text LIKE '%$search%' 

В столбце type указано, из какой таблицы получена запись. Однако это поднимает потенциальную проблему -

Существует вероятность того, что в обеих таблицах одинаковый заголовок - набор результатов будет выглядеть следующим образом:

TITLE      TYPE
----------------------
abc_title  DOWNLOAD
abc_title  NEWS
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...