2011-06-24 3 views
0

J'ai une table que je gardais gardé les messages comment_type, quantité, etc.compte MySQL requête distincte

PostExtras 
- id 
- amount 
- post_id (foreign key) 
- comment_type (foreign key) 
- ... 

comment_type 
- id 
- name 

Je veux choisir les messages qui ont des doubles commentaires de type.

Exemple:

- id  - amount - post_id - comment_type 
1   20   23   1 
2   45   23   2 
3   80   28   1 
4   78   28   2 
5   56   23   1 

rangée 1 et 5 est en fait de même.

+0

en double sur quelle base? –

+0

Donc vous voulez dire opposé de distinct? –

+0

je veux dire les messages qui ont deux ou plus même commentaire_type. – gandil

Répondre

0
SELECT post_id FROM PostExtras 
GROUP BY post_id, comment_type 
HAVING COUNT(comment_type) > 1 
+0

id est incrémenté automatiquement. il n'a pas de sens sauf l'indexation. – gandil

+0

Oui. Mal lu et mis à jour. – ChrisBint

1

Si je comprends bien, utilisez COUNT, GROUP BY and HAVING

SELECT *, COUNT(*) AS itemcount FROM PostExtras 
GROUP BY post_id, comment_type 
HAVING itemcount >= 2 
+0

Cela ne fonctionnera pas car tous les champs ne seront pas ajoutés au groupe. Vous ne pouvez pas non plus grouper autre chose que post_id, comment_type car il semble y avoir des valeurs différentes pour chacune des autres colonnes, qui retourneront alors des données incorrectes. – ChrisBint

+0

J'ai ajouté la clause WHERE pour post_id, mais à propos de votre autre problème, vous n'avez pas besoin d'ajouter tous les champs à une clause GROUP BY dans MySQL. – cypher

+0

Bien que je ne puisse pas confirmer pour l'instant, il semble étrange que vous puissiez ajouter les champs supplémentaires sans les regrouper. Ajoutant également la clause where (indiquant une sélection d'une seule ligne) va presque certainement casser cela. – ChrisBint