2011-08-12 23 views
12

ずに私が持っているinfoを1行を選択:MySQLのテーブルに重複したエントリ

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

まあ、その結果、すべてのエントリが返されます。 すべてのエントリを重複なしでエコーしたいと思います。

Saying:未処理の「名前」に「John」という名前を10回挿入しました。
1回だけエコーしたい。 これは可能ですか?

答えて

30

を必要とするものに応じてORDER BYnameまたはn_names

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

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

+0

偉大な答えは、@ボヘミアン♦ –

2

あなたのSQLなステートメントにGROUP BY nameを追加する - これが唯一の

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

に名前欄

+0

GROUP Byの名前を適用すると、最初の行だけが使用されますか? ID順であれば? – YumYumYum

+1

@YumYumYum order byステートメントを追加しない限り、注文は保証されません – ManseUK

+0

安全性のために私はこの 'SELECT id、duplicate_name、duplicate_email from SERVICE where duplicate_email='[email protected] 'GROUP BY duplicate_email ORDER BY id 'は、そのユーザーがすでにサインアップしてその特定のプロジェクトに次回ログインしたときに行を与えます – YumYumYum

5

変更

SELECT name FROM info WHERE status = 1 ORDER BY id 

から戻って、各エントリのいずれかをもたらすでしょうGROUP BYが追加されたことを確認します。 http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html

編集でグループについての詳細:apparencesの数と名前を
てみ

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

が動作しますが、" name "の後ろにこの' code' echo ' '$ name。' (回) '; – Darius

0

使用 GROUP名

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

がクエリとしてこれを使用してみてくださいBY文:

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 

することができますあなたはそれが非常に簡単です

+0

+1あなたは私よりも数秒速かった:) – Bohemian

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

大量のSMSを送信していて、同じメッセージを同じ男のJohnに2回送信したくないとします。私が発見したのは、GROUP BYとORDER BYのトリックを同時に使っていることが完全に機能していることです。しかし、私はそれが最善の方法であるとは言いません。これはあなたが単一の列、より多く必要と値は、その後DISTINCTを助けていませんでした行ごとにユニークな存在する場合には、注意することが重要である。ここでuはそれ

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

EDIT使用する方法です。

+1

+1これは私のケースでは正解です。私はSELECT 'id、name、emailをSIGNUPから取らなければならなかったので、groups = 'admin'メールでグループidで注文する' – YumYumYum

+0

はい私もそれをテストして働いた – humphrey

0

$ 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 } ?> 
関連する問題