web-dev-qa-db-ja.com

列から一意の値を選択する

次のような情報を含む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
181
meandme

MySQLでは DISTINCT 演算子を使用します。

SELECT DISTINCT(Date) AS Date FROM buy ORDER BY Date DESC;
344
Léon Rodenburg

つかいます

SELECT DISTINCT Date FROM buy ORDER BY Date

mySQLは重複を削除します

ところで:SELECTで明示的な列名を使用すると、MySQLから大きな結果を得るときにPHPで使用するリソースが少なくなります

42
rabudde

このクエリを使用して値を取得します

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

それらは日付DESCで注文しなければならないことを除いて、残りはほとんど正しいです。

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

DISTINCTは常にユニークな値を得るための正しい選択です。また、あなたはそれを使わずに代わりにそれをすることができます。それはGROUP BYです。これは単にクエリの最後に追加され、その後に列名が続きます。

SELECT * FROM buy GROUP BY date,description
6
Kvvaradha

別のDISTINCT回答、ただし複数の値があります:

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

日付ごとの商品詳細も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フィドルで試してください

2
Peter Darmis

同じことを達成するための特定のキーワードがあります。

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

あなたが必要とするものに依存します。

この場合私は提案する:

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

フィールドが少なく、DISTINCTの実行時間がGROUP BYの実行より短いためです。

それ以外の場合、例えばたくさんのフィールドがあるところでは、私は好む:

SELECT * FROM buy GROUP BY date ORDER BY date DESC;
0
Marco Desposito