0

拜托,我想要从我的数据库中返回最后 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/>";
4

4 回答 4

0

怎么样:

select distinct *
FROM `mydb`
WHERE field = 'value' 
ORDER BY id DESC
LIMIT 5

如果id每一行都不同,并且您希望其余列不同:

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
于 2013-06-11T02:02:47.293 回答
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/>";
于 2013-06-11T02:40:12.863 回答
0

你可以做这样的事情来获取其余的列并保持你的独特性。

SELECT 
   DISTINCT t.column, t.*
FROM 
  `mydb` AS t
WHERE 
  t.field = 'value' 
ORDER BY t.id DESC
LIMIT 5
于 2013-06-11T02:47:27.797 回答
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
于 2013-06-11T04:15:58.380 回答