2009-09-26 5 views
0

Très bien, je viens de terminer la normalisation d'une table. Ce que je n'ai pas vraiment considéré quand je le faisais, c'est que j'ai maintenant une relation de un à plusieurs ... étant donné que ma connaissance de SQL est très, très limitée, je ne suis pas vraiment sûr de la façon d'aborder cela.une à plusieurs requêtes

J'ai essayé de regrouper par la clé étrangère, mais il ne renvoie que le dernier résultat correspondant et je veux retourner les deux, ainsi que tous les résultats où il n'y a qu'un seul fk.

sortie souhaitée:

Site   Found On    Score 
    example.com sourece1, source2 400 
    example.net sourece1    23 
    example.org sourece2    23 

Où: siteScoring.url = trouvé sur siteScoring.votes = score de media.file_url = Site

+2

nous montrant votre schéma et la sortie désirée aiderait beaucoup. Encore mieux serait DDL et inserts pour créer un ensemble de données. – RedFilter

+0

Par exemple, est-ce que source1 et source2 ont chacune un score de 400 ou est-ce le score combiné des lignes 'Found on'? –

+0

C'est le score total, aurait dû clarifier cela. – Eric

Répondre

1

Si vous utilisez MySQL 5+, vous pouvez utiliser GROUP_CONCAT(source) (dans la clause select) pour créer t il Found On colonne dans votre position actuelle GROUP BY requête

EDIT: mon erreur, il est MySQL 4.1+: group_concat

1

Psuedo SQL jusqu'à détails ARRIVÉ:

SELECT t.file_url, 
     CONCAT_WS(',', ss.url) 'Found On', 
     SUM(ss.votes) 
    FROM MEDIA t 
    JOIN SITESCORING ss ON ss. = m. --just missing JOIN criteria 
GROUP BY t.file_url 
Questions connexes