memilih nilai-nilai unik dari kolom

Saya memiliki sebuah tabel MySQL yang berisi jenis informasi:

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

Berikut ini adalah contoh script yang saya gunakan untuk mendapatkan data dari tabel ini:

<?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);
?> 

Script ini akan menampilkan setiap tanggal dari tabel, misalnya

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

Saya ingin hanya menampilkan tanggal unik, misalnya

12.dec.2011
10.dec.2011
Mengomentari pertanyaan (1)
Larutan

Gunakan BERBEDA operator di MySQL:

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

gunakan

SELECT DISTINCT Date FROM buy ORDER BY Date

jadi MySQL menghilangkan duplikat

BTW: menggunakan eksplisit nama-nama kolom dalam PILIH menggunakan lebih sedikit sumber daya di PHP ketika anda're semakin besar hasil dari MySQL

Komentar (6)

Menggunakan query untuk mendapatkan nilai-nilai

SELECT * FROM `buy` group by date order by date DESC
Komentar (2)

Sisanya hampir benar, kecuali mereka harus order by Tanggal DESC

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

BERBEDA adalah selalu pilihan yang tepat untuk mendapatkan nilai-nilai unik. Anda juga dapat melakukannya dengan atau tanpa menggunakan itu. Yang's GROUP BY. Yang telah cukup tambahkan pada akhir query dan diikuti dengan nama kolom.

SELECT * FROM buy GROUP BY date,description
Komentar (0)

Lain BERBEDA menjawab, tapi dengan beberapa nilai-nilai:

SELECT DISTINCT `field1`, `field2`, `field3` FROM `some_table`  WHERE `some_field` > 5000 ORDER BY `some_field`
Komentar (0)

Menggunakan sesuatu seperti ini dalam kasus anda juga ingin produk keluaran rincian per tanggal 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"}}

Mencobanya di SQL Biola

Komentar (0)

Tergantung pada apa yang anda butuhkan.

Dalam hal ini saya sarankan:

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

karena ada beberapa bidang dan waktu eksekusi BERBEDA lebih rendah dari pelaksanaan GROUP BY.

Dalam kasus lain, misalnya di mana ada banyak bidang yang saya sukai:

SELECT * FROM buy GROUP BY date ORDER BY date DESC;
Komentar (0)

Ada kata kunci tertentu untuk mencapai tujuan yang sama.

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