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