2012-04-15 43 views
0

我有以下查詢,並希望僅列出第一個匹配項。使用DISTINCT過濾重複項?

$first = $_GET['category']; 
$first = $first[0] . "%"; 

$query = mysql_query("SELECT * FROM lyrics WHERE authorclean LIKE '".$first."'") or die(mysql_error()); 

(?類別= B)

所以DISTINCT能做到這一點嗎?這是我嘗試過,但沒有奏效:

$query = mysql_query("SELECT DISTINCT authorclean FROM lyrics WHERE authorclean LIKE '".$first."'") or die(mysql_error()); 

編輯:這裏是完整的代碼:

function getCategory() { 
$first = $_GET['category']; 
$first = $first[0] . "%"; 

$query = mysql_query("SELECT DISTINCT authorclean FROM lyrics WHERE authorclean LIKE 'B%'") or die(mysql_error()); 
//$query = mysql_query("SELECT * FROM lyrics WHERE authorclean LIKE '".$first."'") or die(mysql_error()); 
if(mysql_num_rows($query) == 0) { 
    echo "Geen resultaten gevonden."; 
} else { 
while ($row = mysql_fetch_assoc($query)) { ?> 
    <p><a href="/<?= $_GET['category']; ?>/<?= strtolower($row['authorclean']); ?>/"><?= $row['author']; ?></a></p> 
    <?php } 
    } 
} 

(B%只是爲了測試)

如果我運行這下面的查詢直接在數據庫中得到兩個結果。如果我用上面的代碼運行,我只是得到一個空的頁面(除了已經存在的HTML)。

SELECT DISTINCT authorclean FROM lyrics WHERE authorclean LIKE 'B%' 
+1

「沒有工作」是什麼意思?你有錯誤嗎?你有錯誤的結果嗎?也請閱讀SQL注入。不要直接在SQL查詢中使用任何外部輸入而不能將其轉義。 – liquorvicar 2012-04-15 12:16:27

+0

它不返回任何結果,只是一個空的頁面。沒有錯誤消息。 – user1333327 2012-04-15 13:40:45

+0

你傾銷了實際的查詢,並直接運行該數據庫,看看它是否返回任何結果? – liquorvicar 2012-04-15 13:51:51

回答

0

如果你有AA表「tbl_lyrics」包含字段:筆者歌詞一年充滿舉例如下:

author_A  lyrics_A  year_A 
author_A  lyrics_A1  year_A1 
author_A1  lyrics_A2  year_A 
author_B  lyrics_B1  year_B1 

如果你

select distinct(author) from tbl_lyrics where author like '%author_A%' 

你會得到:author_A和author_A1。不是第一個匹配的。

如果你想匹配,你可以做第一個:

select author from (select distinct(author) as author from tbl_lyrics where author like '%author_A%') where rownum <2; 

這樣只會返回author_A。

限制與MySql配合使用,但不適用於Oracle數據庫

2

您應該使用LIMIT 1僅列出第一個匹配項。

+0

以這種方式使用限制時,還應該有一個ORDER BY子句。 – nnichols 2012-04-15 12:34:12

+0

@nnichols這取決於操作員想要的順序。 – xdazz 2012-04-15 12:37:49

+0

表示同意。只是希望OP知道應該有ORDER BY子句,否則查詢是非確定性的。 – nnichols 2012-04-15 12:41:00