Получить последний ряд в левом присоединении - PullRequest
0 голосов
/ 24 июня 2018

То, что я пытаюсь сделать с помощью приведенного ниже кода, получая все ключевые слова с их позициями через 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, я имею в виду последнюю запись позиции.

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Вы можете использовать запрос ниже

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);

Вы можете получить дополнительную справку по Получение последней записи в каждой группе - MySQL

0 голосов
/ 24 июня 2018

Не используйте 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...