2014-09-18 3 views
0

J'ai 3 tables avec des livres, des auteurs et des genreschamps en double dans le résultat de la requête col

Je veux obtenir le résultat de sortie comme: livre, auteur et genres, mais quand je fais cette requête, je les champs en double, si les livres ont 5 genres dans l'exemple de la première ligne du résultat de la requête) la ligne auteur duplique 5 aussi ou inversement.

Exemple sur SQL Fiddle ici:

http://sqlfiddle.com/#!2/a15d8/1

je dois en première ligne:

livre | un auteur | cinq genres ... etc.

+1

MySQL opérateur DISTINCT avec l'instruction SELECT pour éliminer les doublons dans le jeu de résultats – deadman

Répondre

1

Pour obtenir ce que vous voulez, ajoutez DISTINCT à la ligne 4, et vous n'aurez aucun doublon. Cependant, vous pouvez toujours renvoyer plusieurs auteurs (uniques), mais c'est ce que votre requête doit renvoyer comme elle est.

comme:

group_concat(DISTINCT concat_ws (' ',`a`.`last_name`,`a`.`first_name`,`a`.`middle_name`)) as author, 
+0

Oui, travailler comme un charm! THX –

0

Vous devriez reconsidérer votre schéma. Juste quelques réflexions à partager: (Je sais que cela ne répond pas à votre question, mais croyez-moi: en utilisant un bon schéma depuis le début peut vous faire économiser beaucoup de travail plus tard)

  1. Dans votre table livres utilisent le author.id comme clé étrangère. Sinon, vous aurez des problèmes dès que vous obtenez des noms en double (ce qui est possible). Rejoindre ces tables deviendra également des moyens plus faciles.

  2. Vous aurez probablement un certain nombre de genres et les assignerez à vos livres. C'est une relation n: m. Ce qui signifie qu'un livre peut avoir plusieurs genres et qu'un genre peut être assigné à plusieurs livres. Vous aurez besoin d'une table de relation pour le faire. La table Relation contiendra alors l'ID d'un livre et l'ID d'un genre et les liera.

Questions connexes