web-dev-qa-db-ja.com

重複エントリのない1行を選択します

Mysqlテーブルにはinfoがあります:

Id、Name、City、date、status

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

その結果、すべてのエントリが返されます。すべてのエントリを重複せずにエコーしたい。

言う:生の「名前」の下に、「ジョン」という名前を10回挿入しました。
一度だけエコーしたい。これは可能ですか?

17
Darius

とても簡単です。

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

SQLキーワードDISTINCTがトリックを行います。

39
Bohemian

これをクエリとして使用してみてください。

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

最初のものはより直感的であり、2つの間に大きなパフォーマンスの違いはないと思います

[〜#〜] edit [〜#〜]

oPはここに名前の数も必要としているので、

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

あなたはできる ORDER BYnameまたはn_names必要なものに応じて

14
Dalen

変化する

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
6
cristian

sQLステートメントにGROUP BY nameを追加します-これにより、名前列から各エントリが1つだけ返されます。

2
ManseUK

バルクSMSを送信していて、同じメッセージを同じ男Johnに2回送信したくないとしましょう。私が発見したのは、GROUP BYとORDER BYのトリックを同時に使用すると完璧に機能するということです。しかし、私はそれが最良の方法だとは言いません。ここにあなたがそれを使用する方法があります

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

編集:これは重要です。1列以上必要であり、行ごとに値が一意である場合、DISTINCTは役に立ちませんでした。

1
Humphrey

$ sql = "SELECT DISTINCT name FROM status = 1 GROUP BY name ORDER BY name";

$query = mysqli_query($conn,$sql);
<?php while ( $fire=mysqli_fetch_array($query)) { ?>
<h4><?php echo $query['name']; ?><br></h4>
<?php } ?>
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>';
                }
0
SergeS

これは私のために機能し、特定のデータベースのテーブル名を返します。

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++;
}       
0
Darkpore