2012-08-01 5 views
0

J'ai deux tables, une pour Strains et une pour StoreStrains. Les magasins vendent des souches de sorte qu'il peut y avoir plusieurs entrées dans "StoreStrains" pour un certain strain_id.Mysql IN Condition Limitation

Je fais un seul appel pour récupérer toutes les souches de la table de contraintes. Ensuite, je cartographie ces strain_ids comme si "1,2,3,4,5". Ensuite, je fais un autre appel SQL pour trouver ce que les magasins ont ces souches. Comme vous pouvez vous y attendre, cela retournera tous les StoreStrains avec un strain_id de 1-5. Mais si 3 de ces magasins portent la même souche, je renverrai 8 résultats, mais je limite à 5.

Sur une plus grande échelle (dans un DB avec 500,000+ StoreStrains), augmentant juste la limite à " obtenir tous les résultats "n'est pas une bonne option du tout. Donc, je me demande s'il y a une limite de façon

WHERE strain_id IN (strain_ids) 

A 1 résultat par?

Je sais que je pouvais faire 5 appels SQL séparés comme ceci:

SELECT * FROM StoreStrains Where strain_id = ? LIMIT 1 

Mais je préférerais tout cela se passe dans un appel sql si possible. Je vous remercie.

+0

Si vous voulez un StoreStrain pour une souche, ce sont les critères à en sélectionner un? Quel StoreStrain devrait être montré? – Devart

Répondre

0

Si vous voulez choisir arbitrairement un magasin, puis faire

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

Mais il est sans doute préférable de le faire

Select Strains.strain_id, GROUP_CONCAT(StrainStore.id) 
From Strains 
Join StrainStore 
    On (Strains.strain_id = StrainStore.strain_id) 
Group by Strains.strain_id