如何在没有全文索引的情况下在两个mysql表中搜索字符串

时间:2010-02-12 02:50:59

标签: mysql search

我有这个查询在两个表中搜索一些字符串(下载,新闻) 并从该记录返回名为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 :(得分:0)

使用:

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