2013-03-15 94 views
0

好,所以我有一個查詢內置的子查詢。但是我希望僅在子查詢表(shop_stock)中實際存在行時纔會發生這種情況。子查詢僅當它包含行時

SELECT id 
FROM item 
WHERE restocks_at = ? 
AND rarity > ? 
AND rarity < ? 
AND price > 0 
AND amount < (SELECT COUNT(id) 
    FROM shop_stock 
    WHERE item_id = item.id 
    AND shop_id = ?) 
ORDER BY rand() 
LIMIT 1 

我想在項目表中的金額欄僅低於表中(shop_stock)與項目ID行,如果它實際上包含所有行。因爲它沒有行開頭,它甚至不會從查詢中提取任何內容。 但是我循環了一個我想插入多少物品的循環,並且在開始時,它在該表中沒有任何內容(shop_stock)。

如果它永遠不會將該ID插入該表中,則該查詢將永遠不會運行。所以我很困惑。我想基本上統計項目ID,以及它在子查詢中出現的次數,如果它甚至在表中。

總而言之,每個項目都有一個金額(2-30),這意味着項目ID 21可能有5的數量意味着我只想要5個項目的最大值來補貨該項目。所以我試圖不要在兩個查詢中選擇一個項目,然後檢查它是否已經在shop_stock表中5次,如果不是,則將該項目插入shop_stock。

+0

請問您是否可以澄清此問題?嘗試用您正在討論的表名替換所有「表格」部分。更好的是;對於你提到的每一列都使用表格例如item.amount – brimble2010 2013-03-15 16:43:18

回答

0

好吧哇老實說..標誌只是放錯了方式。 IF量>子查詢表中已有內容,然後插入..不小於...:/對不起..

SELECT id 
FROM item 
WHERE restocks_at = 1 
AND rarity > 5 
AND rarity < 60 
AND price > 0 
AND amount > (SELECT COUNT(id) 
    FROM shop_stock 
    WHERE item_id = item.id 
    AND shop_id = 1) 
ORDER BY rand() 
LIMIT 1