我正在尝试使用以下代码来实现此目的,通过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();
}
我该怎么做?我应该使用子查询还是什么?没有子查询,有没有办法做到这一点?
我想要的:
得到17而不是13,我的意思是位置的最后一条记录。
答案 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);
获得更多参考