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

405
26 января 2017, 02:25

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

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

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

Answer 1
SELECT * FROM `wall` WHERE `page` = "poll" ORDER BY `id` DESC LIMIT 1

Логика проста выбираем, сортируем по убыванию и берём 1-ю строку.

Answer 2

Вы захотели дать ответ на свой вопрос, он видимо решает вашу конкретную проблему. Но его минусуют, а другой ответ - плюсуют. В чём дело?

Программист -- это чёткость ума и точность формулировок.

Если бы вы сформулировали задачу как "найти идентификатор строки с максимальным..." -- то ваш ответ блестяще бы подошёл под условия задачи. Да, бывает, что некоторые начинающие не знают о существовании конструкции 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 либо вся строка.

Надеюсь, информация из моего ответа поможет сделать более осознанный выбор.

Answer 3

Если необходимо получить только идентификатор строки — то вполне подойдёт и такая конструкция:

SELECT MAX(id) FROM wall WHERE page='poll'
READ ALSO
Java Swing Перекрытие элемента

Java Swing Перекрытие элемента

Доброго времени сутокКак работает позиционирование элементов в Swing относительно слоев? Как сделать так,чтобы один элемент перекрыл другой?...

415
Process type для telegram бота(Heroku Procfile, Java)

Process type для telegram бота(Heroku Procfile, Java)

В документации Heroku не нашёл исчерпывающей информации о том, какие бывают process types и с чем их едятПонял только, что их минимум три:

405
Почему выходит FileNotFoundException в jar файле

Почему выходит FileNotFoundException в jar файле

я хочу создать проект, в котором надо создать jar файлПроект в IntellijIdea работает, даже когда jar file внутри проекта, а когда перемещаю его в рабочий...

365
вопрос по кодировке java

вопрос по кодировке java

Здравствуйте,есть jsp страница в которой есть поле куда нужно вводить строку,передает это всё в сервлет который выводит этоНо если данные...

342