Страницы

Поиск по вопросам

четверг, 19 декабря 2019 г.

Как выбрать строку с максимальным id

#mysql #sql


Как выбрать строку с максимальным id где в колонке page будет poll

Пробовал вот так SELECT MAX(id) FROM wall

Всё хорошо, но мне нужно что бы выбрало строку где в параметре page будет poll
    


Ответы

Ответ 1



Вы захотели дать ответ на свой вопрос, он видимо решает вашу конкретную проблему. Но его минусуют, а другой ответ - плюсуют. В чём дело? Программист -- это чёткость ума и точность формулировок. Если бы вы сформулировали задачу как "найти идентификатор строки с максимальным..." -- то ваш ответ блестяще бы подошёл под условия задачи. Да, бывает, что некоторые начинающие не знают о существовании конструкции where и спрашивают про неё. Вот такой ответ был бы достаточным и полным: SELECT MAX(id) FROM wall WHERE page='poll' Но.. вы написали "Как выбрать строку с максимальным" и даже вынесли это в заголовок. И такое (на ваш взгляд) незначительное изменение кардинально меняет суть вопроса (для отвечающих). От своей конструкции вы не перейдёте к тому, чтобы выбрать всю строку или часть полей строки. А вот ответ @Naumov в этом плане красив, точен и делает именно то, что спрашивают: SELECT * FROM `wall` WHERE `page` = "poll" ORDER BY `id` DESC LIMIT 1 Я вообще почему взялся дописывать ответ, хотя уже есть два ответа сразу на два вопроса? Дело вот в чём. Если у вас есть два сервера, на одном крутится sql-сервер, а на другом - клиент (и даже в случае если это один и тот же сервер), то наша задача - беречь ОЗУ буферов в памяти, через которые сервер отдаёт клиенту данные (передать два поля таблицы по сети или двадцать два - есть разница), беречь трафик по сети (передавать одну строку или миллион строк) и количество подключений (это время, тормоза). Для чего вам нужен этот ID? Пользователю сайта не нужны ID, ему нужны другие поля таблицы. Самым неразумным будет получить на клиенте этот max(id) с сервера и тут же полезть следующим запросом выбирать все поля SELECT * FROM table WHERE id = полученый id. Даже такой громоздкий запрос будет лучше с точки зрения того, что бережёт соединения и уменьшает общее время работы: SELECT * FROM table WHERE id = (SELECT MAX(id) FROM wall WHERE page='poll') Но это менее оптимальный запрос, чем ответ, который вам уже дал Наумов, можете посмотреть план выполнения запроса через explain. Поэтому я рекомендую принять именно его версию, а не вашу. Альтернативно можно было бы переписать формулировку вопроса и принять его. Но я не уверен, что вам охота будет столько заморачиваться - а главное, я думаю, что для будущих посетителей оставить именно такую версию вопроса, потому что именно по таким запросам и будут гуглить впоследствии. Итого, небольшая сводка: Желательно чётко понимать, что вам нужно: либо только id либо вся строка. Надеюсь, информация из моего ответа поможет сделать более осознанный выбор.

Ответ 2



SELECT * FROM `wall` WHERE `page` = "poll" ORDER BY `id` DESC LIMIT 1 Логика проста выбираем, сортируем по убыванию и берём 1-ю строку.

Ответ 3



Если необходимо получить только идентификатор строки — то вполне подойдёт и такая конструкция: SELECT MAX(id) FROM wall WHERE page='poll'

Комментариев нет:

Отправить комментарий