0

Strains 用と StoreStrains 用の 2 つのテーブルがあります。ストアは菌株を販売するため、特定のひずみ_id に対して「StoreStrains」に複数のエントリが存在する可能性があります。

Strain テーブルからすべての Strain を取得するために 1 つの呼び出しを行っています。次に、「1,2,3,4,5」のようにこれらのひずみ ID をマッピングしています。次に、別の SQL 呼び出しを実行して、それらの株がある店舗を見つけます。

SELECT * FROM StoreStrains
WHERE strain_id IN (strain_ids)
LIMIT 5

ご想像のとおり、これにより、strain_id が 1 ~ 5 のすべての StoreStrain が返されます。しかし、それらの店舗のうち 3 つが同じ菌株を扱っている場合、8 つの結果が返されますが、5 つに制限しています。

大規模 (500,000 以上の StoreStrains を含む DB) では、「すべての結果を取得する」ために制限を増やすだけでは、まったく適切なオプションではありません。だから私は道の制限があるのだろうかと思っています

WHERE strain_id IN (strain_ids)

1件につき1件の結果に?

次のような 5 つの個別の SQL 呼び出しを実行できることはわかっています。

SELECT * FROM StoreStrains Where strain_id = ? LIMIT 1

しかし、可能であれば、これがすべて1回のSQL呼び出しで行われることを望んでいます。ありがとうございました。

4

1 に答える 1

0

勝手に店を選びたい場合はこうする

Select strain_id,
       (Select StrainStore.id
        from StrainStore
        Where StrainStore.strain_id = Strains.strain.id
        Limit 1)
From Strains

でも多分こうしたほうがいい

Select Strains.strain_id, GROUP_CONCAT(StrainStore.id)
From Strains
Join StrainStore
    On (Strains.strain_id = StrainStore.strain_id)
Group by Strains.strain_id
于 2012-08-01T23:23:05.520 に答える