在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” 我想只回应一次。 这可能吗?
答案 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
name
或n_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 } ?>