使用DISTINCT过滤重复?

时间:2012-04-15 12:10:06

标签: mysql 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%'

2 个答案:

答案 0 :(得分:2)

您应该使用LIMIT 1仅列出第一个匹配项。

答案 1 :(得分:0)

如果您有一个表“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数据库