选择一行没有重复的条目

时间:2011-08-12 13:17:02

标签: mysql sql select duplicates

在mysql表info中我有:

  

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

我想从“信息”中选择所有名称 进行查询

$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>';
}

好吧,结果是它返回所有条目。 我想回复所有条目而不重复。

说:在原始的“名称”下,我们插入了10次名字“John” 我想只回应一次。 这可能吗?

8 个答案:

答案 0 :(得分:37)

这很简单:

SELECT DISTINCT name FROM info WHERE status = 1 ORDER BY id

SQL关键字DISTINCT可以解决问题。

答案 1 :(得分:14)

尝试将此作为您的查询:

SELECT DISTINCT name FROM info WHERE status = 1 ORDER BY id

获取不同的名称

或其他建议使用GROUP BY

SELECT name FROM info WHERE status = 1 GROUP BY name ORDER BY id

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

修改

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

SELECT name,COUNT(id) AS n_names
FROM info WHERE status = 1
GROUP BY name
ORDER BY name

根据您的需要,您可以ORDER BY namen_names

答案 2 :(得分:6)

更改

SELECT name FROM info WHERE status = 1 ORDER BY id

SELECT name FROM info WHERE status = 1 GROUP BY name ORDER BY id

观察添加了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

答案 3 :(得分:2)

GROUP BY name添加到您的SQL语句中 - 这只会从名称列中返回每个条目之一

答案 4 :(得分:1)

我们假设您正在发送批量短信,并且您不想向同一个人John发送相同的消息两次。我发现,使用GROUP BY和ORDER BY的技巧同时完美无缺。但我并不是说这是最好的方式。以下是你如何使用它

SELECT name FROM info WHERE status = 1 GROUP BY name ORDER BY name

编辑:需要注意的是,当您需要更多单列时,每行的值是唯一的,那么DISTINCT没有帮助。

答案 5 :(得分:0)

使用     GROUP BY名称 声明

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

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

答案 6 :(得分:0)

这适用于我,返回给定数据库的表名。

my $sql="select distinct table_name from COLUMNS  where table_schema='$database'"
my $sth = $dbht->prepare( $sql )
      or die "Cannot prepare SQL statement: $DBI::errstr\n";
  $sth->execute
      or die "Cannot execute SQL statement: $DBI::errstr\n";

  if ($DBI::err){

    $msg= "Data fetching terminated early by error: $DBI::errstr";

}


while (@col=$sth->fetchrow_array()){
    $table[$i]=$col[0];
    $i++;
}       

答案 7 :(得分:0)

$ sql =&#34; SELECT DISTINCT name FROM status = 1 GROUP BY name ORDER BY name&#34 ;;

$query = mysqli_query($conn,$sql);
<?php while ( $fire=mysqli_fetch_array($query)) { ?>
<h4><?php echo $query['name']; ?><br></h4>
<?php } ?>