2013-12-23 19 views
0

我使用這個查詢選擇從MySQL數據庫中的一組記錄:MySQL的:選擇身份證件()和其他

SELECT * 
FROM table 
WHERE id IN(10,14,12,11,8,7,4) 
    AND actief='on' 
ORDER BY FIELD(id,10,14,12,11,8,7,4) 

這會給我指定的ID。在這種情況下,我將獲得最多7條記錄。但是,如果例如ID'14'有效='關閉',它可以更少。

但我需要的是一套20條記錄,其中HET列表IN(10,14,12,11,8,7,4)必須是結果,如果他們也滿足條件active='on'。如果這返回6條記錄,那麼我希望查詢選擇另外14條記錄。首先選擇最高ID,必須符合active='on'並且可能不會在結果中。

這可以通過一個SQL語句來實現。或者,我應該首先將提及查詢的結果放入數組中,並在第二個數組中選擇剩餘的記錄。並最終將這些也放在陣列中?

回答

1

您想排序而不是篩選結果。我想這是你想要的查詢:

SELECT * 
FROM table 
ORDER BY (id IN(10,14,12,11,8,7,4) AND actief = 'on') desc, 
     FIELD(id,10,14,12,11,8,7,4), 
     id desc 
LIMIT 20; 

編輯:

最終的解決方案只是想actief = 'on',所以:

SELECT * 
FROM table 
WHERE actief = 'on' 
ORDER BY (id IN (10,14,12,11,8,7,4)) desc, 
     FIELD(id,10,14,12,11,8,7,4), 
     id desc 
LIMIT 20; 
+0

這隻會返回記錄相匹配'主動給定的ID ='on''。 – Timo002

+0

@ Timo002。 。 。不是現在。我刪除了where子句。 –

+0

@Gordan Linoff,我對查詢做了一個小改動,因爲在你的查詢中,所有其他記錄都不匹配''actief ='on''。所以我添加了一個WHERE條件'WHERE actief ='on''並將它從ORDER BY中移除。完整查詢:'SELECT * FROM p_headsets WHERE actief ='on'ORDER BY(id IN(10,14,12,11,8,7,4)AND actief ='on')desc,FIELD(id,10,14 ,12,11,8,7,4),id desc LIMIT 20' 這很好用! – Timo002