web-dev-qa-db-fra.com

Mysql select distinct

J'essaie de sélectionner les lignes en double dans la table mysql, cela fonctionne bien pour moi, mais le problème est qu'il ne me permet pas de sélectionner tous les champs de cette requête, me permettant simplement de sélectionner le nom de champ que j'ai utilisé comme distinct, laissez-moi écrire le requête pour une meilleure sous-estimation

mysql_query("SELECT DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id")

mysql_query("SELECT * , DISTINCT ticket_id FROM temp_tickets ORDER BY ticket_id")

Le premier fonctionne bien

maintenant, quand j'essaie de sélectionner tous les champs, je me retrouve avec des erreurs

j'essaie de sélectionner le dernier des doublons, disons que ticket_id 127 est 3 fois sur la ligne id 7,8,9, donc je veux le sélectionner une fois avec la dernière entrée qui serait 9 dans ce cas et cela s'applique à tout le reste des tickets_id

Toute idée merci

33
Shanon

Cherchez-vous "SELECT * FROM temp_tickets GROUP BY ticket_id ORDER BY ticket_id?

MISE À JOUR

SELECT t.* 
FROM 
(SELECT ticket_id, MAX(id) as id FROM temp_tickets GROUP BY ticket_id) a  
INNER JOIN temp_tickets t ON (t.id = a.id)
42
a1ex07

DISTINCT n'est pas une fonction qui ne s'applique qu'à certaines colonnes. C'est un modificateur de requête qui s'applique à toutes les colonnes de la liste de sélection.

Autrement dit, DISTINCT ne réduit les lignes que si toutes les colonnes sont identiques aux colonnes d'une autre ligne.

DISTINCT doit suivre immédiatement après SELECT (avec d'autres modificateurs de requête, comme SQL_CALC_FOUND_ROWS). Ensuite, en suivant les modificateurs de requête, vous pouvez lister les colonnes.

  • DROITE:SELECT DISTINCT foo, ticket_id FROM table...

    Générez une ligne pour chaque paire distincte de valeurs sur ticket_id et foo.

  • FAUX:SELECT foo, DISTINCT ticket_id FROM table...

    S'il existe trois valeurs distinctes de ticket_id, cela ne retournerait-il que trois lignes? Et s'il y a six valeurs distinctes de foo? Quelles trois valeurs des six valeurs possibles de foo doivent être sorties?
    C'est ambigu comme écrit.

74
Bill Karwin

Vous pouvez utiliser group by au lieu de distinct. Parce que lorsque vous utilisez distinct, vous aurez du mal à sélectionner toutes les valeurs de la table. Contrairement à lorsque vous utilisez group by, vous pouvez obtenir des valeurs distinctes et également tous les champs de la table.

9
John

Vous pouvez utiliser comme ça

mysql_query ("SELECT DISTINCT (ticket_id), column1, column2, column3 FROM temp_tickets ORDER BY ticket_id")

2
Rahul Sharma

utilisez une sous-sélection:

http://forums.asp.net/t/1470093.aspx

0
Nicolas Modrzyk