196 votes

sélection de 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 de ce tableau :

<?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 "<li><a href='http://www.website/". $row['Date'].".html'>buy ". date("j, M Y", strtotime($row["Date"]))."</a></li>";

    }
    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 n'afficher que des dates uniques, par exemple

12.dec.2011
10.dec.2011

0 votes

0 votes

Je ne suis pas vraiment sûr de l'étiquette appropriée pour cela, mais j'ai besoin de quelque chose qui soit similaire à ceci. J'ai une liste de valeurs comme celles ci-dessus affichées comme une liste de toutes les dates. Je veux ajouter un espace supplémentaire entre la fin d'une séquence de dates et le début d'une autre. Que pensez-vous de cette solution ?

361voto

Léon Rodenburg Points 1807

Utilisez le DISTINCT dans MySQL :

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

18 votes

Le problème malheureux de DISTINCT c'est qu'il ne renvoie que ce seul champ... donc si vous voulez l'enregistrement complet, le DISTINCT ne sert à rien (à moins qu'il ne s'agisse d'un champ d'identification, et que vous puissiez faire une deuxième requête avec l'identification dans cette liste). Bonne nouvelle, cependant, si vous avez plusieurs résultats en double à la suite d'une JOIN, vous pouvez faire un GROUP BY et obtenir les résultats complets filtrés.

2 votes

Ce n'est pas correct Chadwick Meyer ! Vous pouvez choisir plusieurs champs, mais vous devez les regrouper. Vous pouvez le faire comme ceci : SELECT DISTINCT(name) AS yourName, id AS yourId FROM table GROUP BY name ORDER BY name . Vous allez être surpris !

44voto

rabudde Points 3279

Utiliser

SELECT DISTINCT Date FROM buy ORDER BY Date

pour que MySQL supprime les doublons

BTW : l'utilisation de noms de colonnes explicites dans SELECT utilise moins de ressources en PHP lorsque vous obtenez un résultat important de MySQL.

1 votes

Pouvez-vous expliquer "l'utilisation de noms de colonnes explicites" ? quelle méthode est la moins gourmande en ressources et laquelle est la plus élevée ? avec un exemple s'il vous plaît ?

0 votes

Le cas d'utilisation le plus courant est le "streaming" de données depuis une base de données vers un tableau multidimensionnel en PHP ; ainsi, votre processus PHP gaspille simplement de la mémoire avec des données dont vous n'avez peut-être pas besoin. Pour quelques jeux de données seulement, c'est négligeable, mais lorsque vous manipulez des milliers de lignes, cela peut faire une différence.

4 votes

@NabeelKhan au lieu d'utiliser SELECT * ... utilisez SELECT colonne 1, colonne 2 ... Sauf si vous avez vraiment besoin de toutes les colonnes.

26voto

John Points 92

Utilisez cette requête pour obtenir les valeurs

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

3 votes

J'ai trouvé que cela n'était pas utile. Supposons que vous ayez 5 articles, tous avec le même numéro d'article. date mais différent description . En utilisant la commande ci-dessus sera montre distincte date mais seulement le description du premier élément trouvé.

0 votes

@onebree - dans ce cas, vous pouvez faire GROUP BY date,description .

19voto

ajreal Points 31456

Les autres sont presque correctes, sauf qu'elles devraient être classées par Date DESC.

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

5voto

Kvvaradha Points 602

DISTINCT est toujours un bon choix pour obtenir des valeurs uniques. Vous pouvez également le faire de manière alternative sans l'utiliser. C'est GROUP BY . qui a simplement été ajouté à la fin de la requête et suivi du nom de la colonne.

SELECT * FROM buy GROUP BY date,description

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X