0

您好,我想改进我的搜索页面

我正在使用此查询按帖子标题或帖子内容搜索帖子

SELECT * FROM posts 
WHERE post_title rlike $this->secure($_GET['p_title']) 
  OR post_content rlike $this->secure($_GET['p_title']);

我要排序帖子

我想打印我post_title首先得到的帖子

然后打印我得到的帖子post_content

我应该使用两个查询对它们进行排序吗?如果是这样。如何合并两个mysql查询?

4

4 回答 4

2

UNION您可以使用运算符(Docu 链接)合并两个查询的结果,如下所示:

( SELECT 0 AS toBeOrdered, * FROM posts 
  WHERE post_title rlike $this->secure($_GET['p_title'])  )
UNION
( SELECT 1 AS toBeOrdered, * FROM posts 
  WHERE post_content rlike $this->secure($_GET['p_title']) )
ORDER BY toBeOrdered ASC

我插入了一列toBeOrdered以反映您所需的排序。

于 2012-06-11T14:28:25.310 回答
0

尝试使用ORDER BY语句

于 2012-06-11T14:27:41.703 回答
0

您可以使用以下语法对多个列进行排序:

SELECT * FROM posts 
WHERE post_title rlike $this->secure($_GET['p_title']) 
OR post_content rlike $this->secure($_GET['p_title'])
ORDER BY post_title ASC, post_content DESC

当然,相应地调整 ASC 和 DESC

于 2012-06-11T14:28:21.650 回答
0

您可以使用 PHP 对数组进行排序usort(用户排序),它可以使用给定的比较函数对数组进行排序。为此,您首先必须创建一个函数,该函数可以根据标题比较两个帖子,另一个可以比较其内容。

您也可以在查询中使用 SQL 对其进行排序ORDER BY,这样编码简单,加载网页时也更快。使用 PHP/MySQL 时的第一条规则是:MySQL 能做的事情就应该由 MySQL 做。

要回答您的最后一个问题:不要合并您的查询,它们会被混淆,然后您必须用 PHP 将它们分开。两个查询还不错,你知道的!

于 2012-06-11T14:33:29.960 回答