Mam tabelę MySQL, która zawiera następujące informacje:
Date product
2011-12-12 azd
2011-12-12 yxm
2011-12-10 sdx
2011-12-10 ssdd
Oto przykład skryptu, którego używam do pobierania danych z tej tabeli:
<?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);
?>
Ten skrypt wyświetla każdą datę z tabeli, np
12.dec 2011
12.dec.2011
10.dec.2011
10.dec.2011
Chciałbym wyświetlać tylko unikalne daty, np
12.dec.2011
10.dec.2011
Odpowiedzi:
Użyj operatora DISTINCT w MySQL:
źródło
DISTINCT
jest to, że zwraca tylko to jedno pole ... więc jeśli chcesz cały rekord, DISTINCT jest bezwartościowy (chyba że jest to pole id i możesz zrobić drugie zapytanie, gdzie id na tej liście). Dobra wiadomość, jeśli jednak masz wiele zduplikowanych wyników w wyniku JOIN, możesz wykonać GROUP BY i przefiltrować pełne wyniki.posługiwać się
więc MySQL usuwa duplikaty
BTW: użycie jawnych nazw kolumn
SELECT
w PHP zużywa mniej zasobów, gdy otrzymujesz duży wynik z MySQLźródło
Użyj tego zapytania, aby uzyskać wartości
źródło
date
ale innymdescription
. Korzystając z powyższego polecenia będzie pokazać różnedate
s, ale tylkodescription
z pierwszej pozycji znalazł.GROUP BY date,description
.Reszta jest prawie poprawna, z wyjątkiem tego, że powinny zamówić według daty DESC
źródło
DISTINCT
jest zawsze właściwym wyborem, aby uzyskać unikalne wartości. Możesz także zrobić to na przemian bez użycia. ToGROUP BY
. Który po prostu dodaje na końcu zapytania, a po nim następuje nazwa kolumny.źródło
Inna
DISTINCT
odpowiedź, ale z wieloma wartościami:źródło
Użyj czegoś takiego w przypadku, gdy chcesz również wyświetlać szczegółowe informacje o produktach według daty jako JSON.
Wypróbuj w SQL Fiddle
źródło
Istnieje konkretne słowo kluczowe do osiągnięcia tego samego.
źródło
Zależy od tego, czego potrzebujesz.
W takim przypadku sugeruję:
ponieważ jest niewiele pól, a czas wykonania
DISTINCT
jest krótszy niż wykonanieGROUP BY
.W innych przypadkach, na przykład, gdy jest wiele pól, wolę:
źródło