在LEFT JOIN中取得最后一行

时间:2018-06-24 19:21:58

标签: php mysql mysqli

我正在尝试使用以下代码来实现此目的,通过LEFT JOIN获取所有关键字及其位置,它可以正常工作,但它显示每个关键字的第一个位置,但是我想显示记录的最后一个位置(按日期) )。

PHP:

public function getKeyword(){
global $connection;
$array = Array();

$sql = "SELECT keyword.id, keyword.title, keyword.date, rank.position FROM keyword 
LEFT JOIN rank
ON rank.wordid = keyword.id
GROUP BY keyword.id
ORDER BY keyword.date DESC";
$result = $connection->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$array[] = $row;
}
}

return $array;
$connection->close();
}

我该怎么做?我应该使用子查询还是什么?没有子查询,有没有办法做到这一点?

SAMPLE DATA

我想要的:

得到17而不是13,我的意思是位置的最后一条记录。

2 个答案:

答案 0 :(得分:2)

请勿为此使用group by!您要过滤,因此请使用where子句。在这种情况下,使用相关子查询效果很好:

SELECT k.id, k.title, k.date, r.position
FROM keyword k LEFT JOIN
     rank r
     ON r.wordid = k.id AND
        r.date = (SELECT MAX(r2.date)
                  FROM rank r2
                  WHERE r2.wordid = k.id
                 )
ORDER BY k.date DESC

答案 1 :(得分:0)

您可以使用以下查询

SELECT keyword.id, keyword.title, keyword.date, rankNew.position FROM keyword LEFT JOIN (
SELECT rank.wordid, rank.position FROM rank ORDER BY rank.id DESC LIMIT 0, 1) AS rankNew ON (rankNew.wordid = keyword.id);

您可以从Retrieving the last record in each group - MySQL

获得更多参考