J'ai une table MySQL qui contient le type d'informations 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 extraire des données 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 "<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 souhaite uniquement 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
alors MySQL supprime les doublons
BTW: utiliser des noms de colonne explicites dans SELECT
utilise moins de ressources dans PHP lorsque vous obtenez un résultat volumineux de MySQL
Utilisez cette requête pour obtenir des valeurs
SELECT * FROM `buy` group by date order by date DESC
Le reste est presque correct, sauf qu'ils devraient 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
. Ce qui a simplement ajouté à 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 plusieurs valeurs:
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 générer des détails de produits par date au format 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 atteindre le même objectif.
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;