2012-06-11 43 views
0

你好,我想提高排序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查询?

+1

请接受更多您的问题的答案。 [为什么我应该接受答案?](http://meta.stackexchange.com/a/5235/180760) – Sirko

+0

@sirko,我不能接受任何答案之前至少10分钟,第二我试着你的答案.. –

+0

评论与此问题无关,但更一般。你只接受了10个问题中的6个答案,这是一个安静的低比率。 – Sirko

回答

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

+0

终于,我明白了查询..谢谢sirko –

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相应

0

您可以使用PHP对usort(用户排序)使用PHP进行排序,该排序可以使用给定的比较函数对数组进行排序。为了做到这一点,你首先必须创建一个函数,根据它们的标题和另一个可以比较它们的内容的文章来比较两篇文章。

您也可以使用SQL在查询中用ORDER BY对其进行排序,编码简单,加载网页时速度也更快。使用PHP/MySQL时的数字1规则是:MySQL可以完成的任务是MySQL。

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