sélectionner des valeurs uniques dans une colonne

J’ai une table MySQL qui contient le type d’information suivant:

Date product 2011-12-12 azd 2011-12-12 yxm 2011-12-10 sdx 2011-12-10 ssdd 

Voici un exemple de script que j’utilise pour obtenir des données à partir de cette table:

 <?php $con = mysql_connect("localhost","username","password"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("db", $con); $sql=mysql_query("SELECT * FROM buy ORDER BY Date"); while($row = mysql_fetch_array($sql)) { echo "
  • buy ". date("j, MY", strtotime($row["Date"]))."
  • "; } mysql_close($con); ?>

    Ce script affiche chaque date de la table, par exemple

     12.dec 2011 12.dec.2011 10.dec.2011 10.dec.2011 

    Je voudrais seulement afficher des dates uniques, par exemple

     12.dec.2011 10.dec.2011 

    Utilisez l’opérateur DISTINCT dans MySQL:

     SELECT DISTINCT(Date) AS Date FROM buy ORDER BY Date DESC; 

    utilisation

     SELECT DISTINCT Date FROM buy ORDER BY Date 

    donc MySQL supprime les doublons

    BTW: utiliser des noms de colonnes explicites dans SELECT utilise moins de ressources en PHP lorsque vous obtenez un gros résultat de MySQL

    Utilisez cette requête pour obtenir des valeurs

     SELECT * FROM `buy` group by date order by date DESC 

    Les autres sont presque corrects, sauf qu’ils doivent commander par Date DESC

     SELECT DISTINCT(Date) AS Date FROM buy ORDER BY Date DESC; 

    DISTINCT est toujours un bon choix pour obtenir des valeurs uniques. Aussi, vous pouvez le faire alternativement sans l’utiliser. C’est GROUP BY . Qui a simplement append à la fin de la requête et suivi du nom de la colonne.

     SELECT * FROM buy GROUP BY date,description 

    Une autre réponse DISTINCT , mais avec des valeurs multiples:

     SELECT DISTINCT `field1`, `field2`, `field3` FROM `some_table` WHERE `some_field` > 5000 ORDER BY `some_field` 

    Utilisez quelque chose comme ceci au cas où vous souhaiteriez également afficher les détails des produits par date en tant que JSON.

     SELECT `date`, CONCAT('{',GROUP_CONCAT('{\"id\": \"',`product_id`,'\",\"name\": \"',`product_name`,'\"}'),'}') as `productsJSON` FROM `buy` group by `date` order by `date` DESC product_id product_name date | 1 | azd | 2011-12-12 | | 2 | xyz | 2011-12-12 | | 3 | ase | 2011-12-11 | | 4 | azwed | 2011-12-11 | | 5 | wed | 2011-12-10 | | 6 | cvg | 2011-12-10 | | 7 | cvig | 2011-12-09 | RESULT date productsJSON 2011-12-12T00:00:00Z {{"id": "1","name": "azd"},{"id": "2","name": "xyz"}} 2011-12-11T00:00:00Z {{"id": "3","name": "ase"},{"id": "4","name": "azwed"}} 2011-12-10T00:00:00Z {{"id": "5","name": "wed"},{"id": "6","name": "cvg"}} 2011-12-09T00:00:00Z {{"id": "7","name": "cvig"}} 

    Essayez-le dans SQL Fiddle

    Il existe un mot clé spécifique pour la réalisation de la même chose.

     SELECT DISTINCT( Date ) AS Date FROM buy ORDER BY Date DESC; 

    Dépend de ce dont vous avez besoin.

    Dans ce cas, je suggère:

     SELECT DISTINCT(Date) AS Date FROM buy ORDER BY Date DESC; 

    car il y a peu de champs et que le temps d’exécution de DISTINCT est inférieur à l’exécution de GROUP BY .

    Dans d’autres cas, par exemple où il y a beaucoup de champs, je préfère:

     SELECT * FROM buy GROUP BY date ORDER BY date DESC;