从列中选择唯一值

mea*_*dme 189 php mysql sql

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

    Date            product 
2011-12-12           azd
2011-12-12           yxm
2011-12-10           sdx
2011-12-10           ssdd  
Run Code Online (Sandbox Code Playgroud)

以下是我用来从此表中获取数据的脚本示例:

<?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);
?> 
Run Code Online (Sandbox Code Playgroud)

此脚本显示表中的每个日期,例如

12.dec 2011
12.dec.2011
10.dec.2011
10.dec.2011
Run Code Online (Sandbox Code Playgroud)

我想只显示独特的日期,例如

12.dec.2011
10.dec.2011
Run Code Online (Sandbox Code Playgroud)

Léo*_*urg 352

在MySQL中使用DISTINCT运算符:

SELECT DISTINCT(Date) AS Date FROM buy ORDER BY Date DESC;
Run Code Online (Sandbox Code Playgroud)

  • "DISTINCT"的一个不幸的问题是它只返回一个字段......所以如果你想要整个记录,那么DISTINCT就没用了(除非它是一个id字段,你可以做第二个查询,其中id为该列表).但是,好消息是,如果由于JOIN而导致多个重复结果,则可以执行GROUP BY并获取已过滤的完整结果. (18认同)
  • 那是不正确的查德维克迈耶!您可以选择多个字段,但必须对它们进行分组。你可以这样做: SELECT DISTINCT(name) AS yourName, id AS yourId FROM table GROUP BY name ORDER BY name 。你会感到惊讶! (2认同)

rab*_*dde 43

使用

SELECT DISTINCT Date FROM buy ORDER BY Date
Run Code Online (Sandbox Code Playgroud)

所以MySQL删除了重复项

顺便说SELECT一下:当你从MySQL获得大量结果时,在PHP中使用显式列名更少的资源

  • @NabeelKhan而不是使用SELECT * ...使用SELECT列1,列2 ...除非确实需要所有列。 (2认同)
  • @NabeelKhan 在连接表时只需要 tablename.columnname 。 (2认同)

Joh*_*ohn 25

使用此查询获取值

SELECT * FROM `buy` group by date order by date DESC
Run Code Online (Sandbox Code Playgroud)

  • 我发现这没有用.假设您有5个项目,所有项目都具有相同的"日期"但不同的"描述".使用上面的命令_will_ show distinct`date`s,但只找到第一个项目的`description`. (3认同)

ajr*_*eal 20

其余几乎是正确的,除了他们应该由Date DESC订购

SELECT DISTINCT(Date) AS Date FROM buy ORDER BY Date DESC;
Run Code Online (Sandbox Code Playgroud)


Kvv*_*dha 6

DISTINCT始终是获得独特价值的正确选择.您也可以在不使用它的情况下进行替换.那是GROUP BY.它只是在查询结尾添加,后跟列名.

SELECT * FROM buy GROUP BY date,description
Run Code Online (Sandbox Code Playgroud)