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

商品テーブルの金額列が、実際に行が含まれている場合に、その商品 ID を持つテーブル (shop_stock) の行よりも少なくなるようにします。そもそも行がないため、クエリから何も取得しません。しかし、挿入したいアイテムの数のループをループしていますが、最初はそのテーブル (shop_stock) に何もありません。

その ID をそのテーブルに挿入しない場合、このクエリは実行されません。だから私は混乱しています。基本的に、アイテムIDと、それがテーブルにある場合でもサブクエリでどれだけ発生するかをカウントしたいと思います。

全体として、各アイテムには数量 (2-30) があります。これは、アイテム ID 21 の数量が 5 である可能性があることを意味します。つまり、そのアイテムの再入荷には最大 5 個のアイテムのみが必要です。そのため、アイテムを選択し、それが既に shop_stock テーブルにあるかどうかを 5 回チェックし、そうでない場合は、アイテムを shop_stock に挿入する必要がある 2 つのクエリを作成しないようにしています。

4

1 に答える 1

0

うわー、正直なところ..サインが間違った方法で配置されました。IF amount > subquery テーブルに既にあるもの, then insert.. 未満ではありません... :/ 申し訳ありません..

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
于 2013-03-15T17:24:05.730 に答える