アイテムの ID をモデルに渡しています。このアイテム ID をクエリで使用して、area_id を検索し、そこから同じ area_id を持つ他のアイテムを返したいと考えています。サブクエリを見てみましたが、それは私には正しくないようでした。これが私の構造です。
アイテム:
ID -- Title -- Area_id(FK) -- Description -- Date_added
領域:
ID -- Place -- Date_Added
助けてくれてありがとう
ジョニー
アイテムの ID をモデルに渡しています。このアイテム ID をクエリで使用して、area_id を検索し、そこから同じ area_id を持つ他のアイテムを返したいと考えています。サブクエリを見てみましたが、それは私には正しくないようでした。これが私の構造です。
アイテム:
ID -- Title -- Area_id(FK) -- Description -- Date_added
領域:
ID -- Place -- Date_Added
助けてくれてありがとう
ジョニー
まず、あなたのアイテムを選択します。
SELECT Area_id FROM Item i WHERE ...
エリアIDを取得する
次に、特定の領域のすべてのアイテムを取得する必要があります。
SELECT * From Item WHERE Area_id IN (...)
2 つのクエリをまとめます。
SELECT * From Item WHERE Area_id IN (SELECT Area_id FROM Item i WHERE ...)
これで完了です。
サブクエリはパフォーマンスに適していないことに注意してください。そのため、データベースが大きくなるにつれてこのクエリをベンチマークして監視し、パフォーマンスの問題が発生したときに最適化することをお勧めします。
これを試して:
SELECT i2.*
FROM item i1, item i2
WHERE i1.id = :input_item_id
AND i1.area_id = i2.area_id
これは「自己結合」と呼ばれるもので、サブクエリを使用したソリューションよりもはるかに効率的です。