如何将这两个sql查询合并为一个?
SELECT DISTINCT * FROM rss WHERE MATCH(content,title) AGAINST ('$filter')
SELECT COUNT(content) FROM rss WHERE MATCH(content,title) AGAINST ('$filters')
如果上述查询结果为0
-
SELECT DISTINCT * FROM rss WHERE content LIKE '%$filters%' OR title LIKE '%$filters%';
$filter .= $row['filter'];
$filters = $row['filter'];
$过滤器可能不止一个关键字
答案 0 :(得分:3)
您不必使用查询2,
mysql_num_rows
将指示查询1的行数,因此只需丢弃查询2
如果mysql_num_rows
返回零,则继续查询3
要将三个查询合并为一个,请使用OR
SELECT DISTINCT * FROM rss
WHERE
(MATCH(content,title) AGAINST ('$filter'))
OR
(content LIKE '%$filter%' OR title LIKE '%$filter%')
如上所述,您实际上不需要先计算。
如果$ filter包含大量关键字,那么只需重复
(content LIKE '%$filter_1%' OR title LIKE '%$filter_1%') OR
(content LIKE '%$filter_2%' OR title LIKE '%$filter_2%') OR ...
答案 1 :(得分:0)
您可以使用UNION ALL
合并1和3。但是你不能将2nd与其他2合并,因为COUNT
会返回一堆行的聚合。
你最好在你的情况下编写存储过程,而不是尝试将所有三个存储在一个语句中。
编辑(通过sv88erik):由于您使用的是UNION ALL
,因此在每个查询中都不需要DISTINCT
个关键字。