2012-06-11 162 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將它們分開。兩個查詢都不錯,你知道!