您好我想改进我的搜索页面
我正在使用此查询按帖子标题或帖子内容搜索帖子
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查询?
答案 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分开。你知道,两个问题并不是那么糟糕!