2013-01-21 174 views
0

我PHP創建一個簡單的SQL查詢呼應兩次 - 出於某種原因,即使使用DISTINCT,它出現了兩次這樣的:SQL SELECT查詢即使DISTINCT

BC 
BC 
OH 
OH 
TX 
TX 

這裏是我的代碼:

<?php 
$sql = "SELECT DISTINCT `title`,`extra_fields_search` FROM `blahblah_items` WHERE catid=336 ORDER BY `blahblah_items`.`extra_fields_search` ASC "; 
$partnerlisting= mysql_query($sql) or die(mysql_error()); 
while($row = mysql_fetch_assoc($partnerlisting)) 
foreach($row as $cname => $cvalue){ 
echo '<li>'.substr($row[extra_fields_search], 0, 2).'</li><br>'; 
} 
; 

?> 

我怎樣才能讓它打印出每個只有一個?

+4

不同的適用於整行。如果您獲得重複的標題,則可能在extra_fields_search中獲得了不同的值,例如null +空字符串。 –

+0

「此SQL DISTINCT子句示例將返回每個唯一的城市和州組合,在這種情況下,DISTINCT將應用於DISTINCT關鍵字後列出的每個字段。」 來源:http://www.techonthenet.com/sql/distinct.php – Gyhth

+0

@TomWalters謝謝。還在習慣SO禮儀。並感謝關於切換到mysqli的提示。 – itamar

回答

1
SELECT 
    `title`, 
    `extra_fields_search` 
FROM 
    `blahblah_items` 
WHERE 
    catid=336 
GROUP BY 
    SUBSTRING(extra_fields_search,1,2) # here. group by first two characters of extra_fields_search 
    # or just "GROUP BY extra_fields_search", depends what you need 
ORDER BY 
    `blahblah_items`.`extra_fields_search` ASC 

SELECT DISTINCT a,b FROM table作品以同樣的方式SELECT a,b FROM table GROUP BY a,b

請按照文檔:

0

試試這個

SELECT `title`,`extra_fields_search` 
FROM `blahblah_items` WHERE catid=336 
Group BY extra_fields_search 
ORDER BY `blahblah_items`.`extra_fields_search` ASC 

編輯: 試試這個在您的代碼

while($row = mysql_fetch_assoc($partnerlisting)) 
    $rows[] = $row; 
    foreach($rows as $row){ 
    echo '<li>'.substr($row[extra_fields_search], 0, 2).'</li><br>'; 
    } 
    ; 
+0

編輯我的答案,試試看 –

0

鮮明確保您得到唯一的行。它不確定你會得到獨特的列值。在你的情況下,如果你考慮結果中的所有字段,你會注意到每行至少有一個字段與另一行不同。

所以你永遠不會得到

Col1 Col2 
A  B 
A  B 

但你可以得到

Col1 Col2 
A  B 
A  C 
0

嘗試:

SELECT `title`, group_concat(distinct `extra_fields_search`) 
FROM `blahblah_items` 
WHERE catid=336 
Group BY `title` 
ORDER BY 2