2012-02-15 39 views
2

我需要從我的網站上的特色部分的表中拉3行。我首先從訂單表中檢索出售量最高的3件商品的列表。然後我需要檢查一下,看看有沒有剩下。如果是這樣,請從庫存表中提取其詳細信息。問題是,我總是需要3.如果訂單表中沒有3個物品仍然有貨,我需要足夠的3個,從隨機選擇。我怎樣才能設置WHERE id IN (1, 2),然後仍然拉1隨機記錄?SQL查找某些ID和填充

+2

哪個數據庫lang? – 2012-02-15 21:04:39

+0

我使用mysql – LordZardeck 2012-02-15 21:09:32

回答

2

您可以使用UNION加入記錄WHERE id IN (1, 2),然後第二個查詢是您的隨機記錄。

SELECT * 
FROM table 
WHERE id IN (1, 2) 

UNION 

SELECT Top 1 * 
FROM table 

如果您提供了有關您的查詢的更多詳細信息,那麼我可以提供更詳細的答案。

編輯: 基於您的評論,你應該能夠做一些這樣類似:

SELECT * 
FROM list_cards 
WHERE card_id IN (1, 2) AND qty > 0 

UNION 

SELECT * 
FROM list_cards 
WHERE qty > 0 

如果你想確保您始終獲得3個結果:

有關使用
SELECT TOP 3 C.* 
FROM 
(
    SELECT C.*, '1' as Priority 
    FROM list_cards C 
    WHERE C.card_id IN (1, 2) AND qty > 0 

    UNION 

    SELECT C.*, '2' as Priority 
    FROM list_cards C 
    WHERE qty > 0 
) C 
ORDER BY C.Priority 
+0

好吧,我正在使用cakephp,現在它並沒有顯示我的查詢是什麼。但我想它會看起來像'SELECT * FROM list_cards where card_id IN(1,2)AND qty> 0' – LordZardeck 2012-02-15 21:14:02

+0

@LordZardeck請參閱我的編輯。 – Taryn 2012-02-15 21:15:59

+0

如果card_id 2的數量爲0,會發生什麼情況?那麼我只會得到2個結果? – LordZardeck 2012-02-15 21:19:14

3

如何UNION和另一個SELECT,與LIMIT 1

3

這樣的黑客可能會選擇虛擬數據嗎?

SELECT TOP 3 * 
FROM 
(
    SELECT * from table WHERE id IN (1,2) 
    UNION 
    SELECT 0; 
    UNION 
    SELECT 0; 
    UNION 
    SELECT 0; 
) 
ORDER BY [whatever field]