2009-07-31 5 views
13

Par le biais d'un service web, mon application reçoit une liste d'identifiants. Avec cette liste, je dois rechercher un champ, un par identifiant. Si le champ n'existe pas, la valeur doit être nulle (elle doit être affichée). Je me demande quelle serait la meilleure approche. J'ai d'abord pensé qu'il était préférable de créer une table temporaire contenant les ID puis de les joindre à la table contenant les données, mais si je me trompe, cela prend au moins 1 requête par identifiant pour l'insérer dans la table temporaire. Dans ce cas, il me semble que je pourrais tout aussi bien parcourir la liste des identifiants de mon application et interroger la base de données 1 par 1. Est-ce correct? Quelle approche pouvez-vous conseiller?MySQL Meilleure façon de sélectionner en utilisant la liste des ID

salutations,

coen

Répondre

20

Utilisez le SELECT WHERE IN() Syntaxe pour obtenir un jeu de résultats avec les données dont vous avez besoin, puis itérer dessus dans votre code. De cette façon, vous n'interrogez qu'une seule fois la base de données et n'obtenez que les informations dont vous avez besoin.

+0

+1 meilleure façon de le faire – alex

0

L'affichage de null est l'astuce, vous devez joindre la table à lui-même, donc il y a deux recherches d'index par enregistrement. Le simple fait de faire une requête 1-à-1 pour chaque identifiant ne nécessite qu'une seule recherche d'index.

En pratique, il ne sera pas deux fois plus lent, puisque l'identificateur sera dans le cache de clé au moment où la deuxième recherche est exécutée.

Une autre option est de rendre votre sortie en utilisant les identifiants d'entrée, et d'utiliser un "IN" comme suggéré précédemment. Les enregistrements NULL ne seront pas dans la sortie de la requête, mais ce serait bien puisque vous savez ce qui a été demandé.

+0

Cela suppose que les éléments qu'il a reçus sont les seuls éléments de la table, s'il s'agit d'un sous-ensemble, il va revenir plus que ce qu'il a demandé. – MyItchyChin

Questions connexes