选择一行没有重复的条目

Dar*_*ius 17 mysql sql select duplicates

在mysql表中info我有:

ID,姓名,城市,日期,状态

我想从"info"中选择所有名称进行查询

$query = mysql_query("SELECT name FROM info WHERE status = 1 ORDER BY id") 
         or die(mysql_error());

while ($raw = mysql_fetch_array($query)) 
{
  $name = $raw["name"];
  echo ''.$name.'<br>';
}
Run Code Online (Sandbox Code Playgroud)

好吧,结果是它返回所有条目.我想回复所有条目没有重复.

说:在原始的"名称"下,我们插入了名字"约翰"10次.
我想只回应一次.这可能吗?

Boh*_*ian 40

这很简单:

SELECT DISTINCT name FROM info WHERE status = 1 ORDER BY id
Run Code Online (Sandbox Code Playgroud)

SQL关键字DISTINCT可以解决这个问题.


Dal*_*len 14

尝试使用此作为您的查询:

SELECT DISTINCT name FROM info WHERE status = 1 ORDER BY id
Run Code Online (Sandbox Code Playgroud)

得到不同的名字

或作为其他建议用途 GROUP BY

SELECT name FROM info WHERE status = 1 GROUP BY name ORDER BY id
Run Code Online (Sandbox Code Playgroud)

我认为第一个更直观,两者之间没有很大的性能差异

编辑

因为OP也想要我们去的名字数量:

SELECT name,COUNT(id) AS n_names
FROM info WHERE status = 1
GROUP BY name
ORDER BY name
Run Code Online (Sandbox Code Playgroud)

你可以ORDER BY namen_names根据你的需要


cri*_*ian 6

更改

SELECT name FROM info WHERE status = 1 ORDER BY id
Run Code Online (Sandbox Code Playgroud)

SELECT name FROM info WHERE status = 1 GROUP BY name ORDER BY id
Run Code Online (Sandbox Code Playgroud)

观察GROUP BY添加的内容.有关组的更多信息,请访问http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html

编辑:
对于名称与表面数量尝试

SELECT name, count(name) FROM info WHERE status = 1 GROUP BY name ORDER BY id