Получить последний ряд в левом присоединении

0

То, что я пытаюсь сделать с помощью кода ниже, получая все ключевые слова с их позициями через 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
    SELECT keyword.id, keyword.title, keyword.date, rank.position ... GROUP BY keyword.id - это недопустимый запрос, который будет приводить к неверным результатам. Приведенные в качестве примера данные с ожидаемым выводом помещают их на sqlfiddle.com или db- fiddle.com .. А также дайте нам версию MySQL с SELECT VERSION()
  • 0
    @RaymondNijland Но я получил свои результаты, почему недействительным?
Показать ещё 3 комментария
Теги:
mysqli

2 ответа

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
  • 0
    Я получил ошибку, Trying to get property of non-object с вашим кодом
  • 0
    @tourtravel. , , Ваш вопрос говорит о том, что в рейтинге есть поле даты «хотите показать последнюю записанную позицию (по дате)». Возможно, вам придется использовать правильное имя столбца.
Показать ещё 4 комментария
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);

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню