2014-02-12 55 views
1

我有以下的表稱爲議程:MYSQL查詢從表中選擇並按日期和其他字段排序。其他優先領域

ID:visible:sticky:startdate 
1:  1:  1:2014-03-08 
2:  1:  0:2014-02-25 
3:  1:  0:2014-02-27 
4:  1:  0:2014-02-20 
5:  1:  0:2014-03-12 

(ID->int, visible->tinyint, sticky->tinyint, startdate->date) 

我運行下面的查詢按日期以獲得未來三個議程項目,工作過程的罰款。返回ID的4,2,3

SELECT * 
    FROM agenda 
    WHERE visible 
    AND startdate >= "2014-02-12" 
ORDER BY startdate ASC 
    LIMIT 3 

但我想是優先考慮的是有粘性的領域= 1,如果有將它設置在它們應該在的結果和被佔的ORDER領域通過。所以我想它返回的是ID的4,2,1

這怎麼能實現?

+1

確實可見是TINYINT,而不是BOOL?此外,請參閱FIELD() – Strawberry

+0

可見在這種情況下是TINYINT,但它充當BOOL。它是1或0,所以查詢在哪裏可見和正在工作 – tvgemert

+0

@tvgemert'在哪裏(可見 AND startdate> =「2014-02-12」)或sticky = 1'? – Alexander

回答

2
SELECT * 
FROM (
    SELECT * FROM 
    agenda 
    WHERE visible 
    AND startdate >= "2014-02-12" 
    ORDER BY sticky DESC, startdate ASC 
    LIMIT 3 
) subquery 
ORDER BY startdate ASC 
+0

謝謝!就是這個。 – tvgemert

0

這將在結果的頂部設置粘性,據我所知無法在中途包含它們,您始終可以使用2個查詢並將結果組合到一個數組中,然後您可以按日期排序。

SELECT * 
FROM agenda 
WHERE visible 
AND startdate >= "2014-02-12" 
ORDER BY sticky DESC , startdate ASC 
LIMIT 3 
+0

但是,這不起作用,因爲它會先執行ORDER BY startdate,然後粘滯。我想粘,總是包括,如果它是1 – tvgemert

+0

更新我的awnser – Joostkam

+0

相同,但其他方式。創建數組並對其進行排序是一個選項,但應該可以使用SQL嗎? – tvgemert

相關問題