簡體   English   中英

從列中選擇唯一值

[英]selecting unique values from a column

我有一個 MySQL 表,其中包含以下類型的信息:

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

這是我用來從該表中獲取數據的腳本示例:

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

此腳本顯示表中的每個日期,例如

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

我只想顯示唯一的日期,例如

12.dec.2011
10.dec.2011

在 MySQL 中使用DISTINCT運算符:

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

SELECT DISTINCT Date FROM buy ORDER BY Date

所以 MySQL 刪除重復項

順便說一句:當您從 MySQL 獲得大量結果時,在SELECT使用顯式列名在 PHP 中使用的資源較少

使用此查詢獲取值

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

其余的幾乎是正確的,除了它們應該按日期 DESC 排序

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

DISTINCT始終是獲得獨特價值的正確選擇。 您也可以在不使用它的情況下進行替代。 那是GROUP BY 它只是在查詢的末尾添加,然后是列名。

SELECT * FROM buy GROUP BY date,description

另一個DISTINCT的答案,但有多個值:

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

如果您還想將每個日期的產品詳細信息輸出為 JSON 並且MySQL版本不支持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"}}

SQL Fiddle 中嘗試一下

如果您使用的是支持JSON函數的MySQL版本,則可以重寫上述查詢:

SELECT `date`,JSON_OBJECTAGG(CONCAT('product-',`product_id`),JSON_OBJECT('id', `product_id`, 'name', `product_name`)) as `productsJSON`
FROM `buy` group by `date`
order by `date` DESC;

DB Fiddle 中嘗試兩者

取決於你需要什么。

在這種情況下,我建議:

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

因為字段少,而且DISTINCT的執行時間低於GROUP BY的執行時間。

在其他情況下,例如在有很多字段的情況下,我更喜歡:

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

有一個特定的關鍵字可以實現相同的目標。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM