2013-12-09 83 views
2

我有以下查詢。它選擇標題中包含綠色,藍色或紅色字樣的所有帖子。按正則表達式匹配次數排序mysql結果

SELECT ID,標題從帖子裏的標題REGEXP「(綠色|藍色|紅)」

我想結果以這樣的方式進行排序,標題最匹配(所有三個詞),因此是最相關的一個,首先列出。在這種情況下,這可能嗎?如果是這樣,我會怎麼繼續呢?

謝謝

+0

'SELECT id,title FROM post ORDER BY FIELD(color,'green','blue','red')' – 7alhashmi

回答

0

你必須拆分正則表達式。無論是不同的情況或不同的查詢:

SELECT COUNT(results.username) as count, results.* FROM (
    SELECT * FROM `post` WHERE `title` LIKE "%blue%" 
    UNION SELECT * FROM `post` WHERE `title` LIKE "%red%" 
    UNION SELECT * FROM `post` WHERE `title` LIKE "%green%" 
) as results GROUP BY results.title ORDER BY count DESC; 

注:我用LIKE代替REGEXP,becouse當你分割的條件,你不會需要它了,根據你的榜樣。 LIKE比正則表達式要快一點,但是如果你的模式更復雜,那麼你總是可以將它替換回來。

+0

正如[Alma Do's answer]中所述(http://stackoverflow.com/a/20467825/1697320),你最好用FULLTEXT。 –