排序mysql结果

时间:2012-06-11 14:25:00

标签: php mysql

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

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

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 个答案:

答案 0 :(得分:2)

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

( 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以反映您想要的排序。

答案 1 :(得分:0)

尝试使用ORDER BY声明

答案 2 :(得分: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

答案 3 :(得分:0)

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

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

要回答您的上一个问题:不要合并您的查询,它们会混淆,然后您必须将它们与PHP分开。你知道,两个问题并不是那么糟糕!