请,我想从我的数据库中返回最后5个独特结果的最佳方法。到目前为止,我使用以下代码,但显然它可以返回一些重复值的结果。
Column0是行ID,是唯一的数字键。 Column1值必须是唯一的,column2可以并且将返回一些重复值。
$result = mysql_query("SELECT *
FROM `mydb`
WHERE field = 'value'
ORDER BY ID DESC
LIMIT 5") ;
while($row = mysql_fetch_array($result))
{
$var = $row['column1'];
$var2 = $row['column2'];
}
echo $var;
echo $var2;
echo "<br/>";
答案 0 :(得分:0)
怎么样:
select distinct *
FROM `mydb`
WHERE field = 'value'
ORDER BY id DESC
LIMIT 5
如果每行的id
不同,并且您希望列的 rest 不同:
select <all columns but id>
FROM `mydb`
WHERE field = 'value'
group by <all columns but id>
ORDER BY min(id) DESC
LIMIT 5
对于您希望第2列具有唯一值的情况,请使用group by
:
select *
FROM `mydb`
WHERE field = 'value'
group by column2
ORDER BY id DESC
LIMIT 5
答案 1 :(得分:0)
真诚地感谢,但DISTINCT的工作方式如下。我从你的回复中解决了这个问题。
$result = mysql_query("SELECT DISTINCT column
FROM `mydb`
WHERE field = 'value'
ORDER BY ID DESC
LIMIT 5") ;
while($row = mysql_fetch_array($result))
{
$var = $row['column'];
}
echo $var;
echo "<br/>";
答案 2 :(得分:0)
你可以做这样的事情来获得其余的列并保持你的不同。
SELECT
DISTINCT t.column, t.*
FROM
`mydb` AS t
WHERE
t.field = 'value'
ORDER BY t.id DESC
LIMIT 5
答案 3 :(得分:0)
SELECT *
FROM mydb
WHERE field = 'value'
GROUP BY column1
ORDER BY ID DESC
LIMIT 5
如果有多个行具有相同的column1
值,则会任意选择其中一行。如果您需要ID最高的那个,请使用:
SELECT t1.*
FROM mydb t1
JOIN (SELECT column1, max(ID) ID
FROM mydb
GROUP BY column1) t2
USING (column1, ID)
ORDER BY ID DESC
LIMIT 5