2011-08-12 64 views
12

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

好吧,結果是它返回所有的條目。 我想回顯所有沒有重複的條目。

說:在原始的「名稱」下,我們插入了名稱「John」10次。
我只想回顯一次。 這可能嗎?

回答

30

這很簡單:

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

SQL關鍵字DISTINCT的伎倆。

+0

很好的答案,謝謝@波希米亞♦ –

2

添加GROUP BY name到您的SQL Statment - 這隻會帶回每個條目的一個從名稱列

+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 

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

編輯:
與apparences數名試圖

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

工作,但是我想懲罰「名稱」後有多少入口是這樣的'代碼'回聲' '$名字。' (倍)'; – Darius

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

嘗試使用此爲您查詢:

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 BYnamen_names取決於你需要什麼

+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

讓我們說,你發送大量的短信,你不想發送同樣的消息兩次給同一個傢伙約翰。我發現的是,使用GROUP BY和ORDER BY的技巧同時完美地工作。但我並不是說它是最好的方式。下面是如何ü可以用它

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

編輯:此要注意,當你需要更多的則單列和值有每行唯一那麼DISTINCT沒有幫助是很重要的。

+1

+1這是我的情況是正確的。因爲我不得不採取'SELECT ID,姓名,來自SIGNUP的電子郵件,其中groups ='admin'通過電子郵件分組ORDER by 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 } ?>