Joindre une ligne à plusieurs lignes dans une autre table
J'ai une table pour les entités (appelons les personnes) et les propriétés (une personne peut avoir un nombre arbitraire de biens). Ex:
Personnes
Name Age
--------
Jane 27
Joe 36
Jim 16
Propriétés
Name Property
-----------------
Jane Smart
Jane Funny
Jane Good-looking
Joe Smart
Joe Workaholic
Jim Funny
Jim Young
Je voudrais écrire un efficace sélectionnez ce serait de sélectionner les personnes selon l'âge et le retour de tout ou partie de leurs propriétés.
Ex: People older than 26
Name Properties
Jane Smart, Funny, Good-looking
Joe Smart, Workaholic
Il est également acceptable de retourner l'une des propriétés et le total de la propriété count.
La requête doit être efficace: il y a des millions de lignes dans les gens de la table, des centaines de milliers de lignes dans le tableau des propriétés (donc la plupart des gens n'ont pas de biens). Il y a des centaines de lignes sélectionnées à la fois.
Est-il un moyen de le faire?
source d'informationauteur Ghostrider
Vous devez vous connecter pour publier un commentaire.
Utilisation:
Vous voulez que MySQL fonction GROUP_CONCAT (la documentation) afin de retourner une liste séparée par des virgules des PROPRIÉTÉS.la valeur de la propriété.
J'ai utilisé une JOINTURE GAUCHE plutôt qu'une JOINTURE pour inclure les PERSONNES enregistrements qui n'ont pas une valeur dans le tableau des PROPRIÉTÉS - si vous souhaitez uniquement une liste de personnes avec des valeurs dans le tableau des PROPRIÉTÉS, utilisation:
Je réalise que c'est un exemple, mais à l'aide d'un nom est un mauvais choix pour les référentiels de l'intégrité quand vous considérez combien de "John Smith"s il existe. L'affectation d'un user_id, étant une valeur numérique, serait un meilleur choix.
Vous pouvez utiliser
INNER JOIN
de lier les deux tables ensemble. Plus d'infos sur les Jointures.Toutefois, il est souvent beaucoup plus rapide pour ajouter un unique clé primaire de tables comme celles-ci, et de créer un index pour augmenter la vitesse.
Dire que le tableau
People
a un champid
Et la table
Properties
a un champpeopleId
pour les relier ensembleAlors la requête devrait alors ressembler à ceci:
essayer cette