0

我有以下查询,并且只想列出第一个匹配项。

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

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

(?category=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%'
4

2 回答 2

2

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

于 2012-04-15T12:12:44.733 回答
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。

Limit 与 MySql 一起使用,但不适用于 oracle 数据库

于 2012-04-15T12:19:04.600 回答