如何将这三个sql查询合并为一个?

时间:2010-12-25 17:35:00

标签: php mysql full-text-search

如何将这两个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'];

$过滤器可能不止一个关键字

2 个答案:

答案 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个关键字。