Как выбрать строку с максимальным id где в колонке page будет poll
Пробовал вот так SELECT MAX(id) FROM wall
Всё хорошо, но мне нужно что бы выбрало строку где в параметре page будет poll
Ответ
Вы захотели дать ответ на свой вопрос, он видимо решает вашу конкретную проблему. Но его минусуют, а другой ответ - плюсуют. В чём дело?
Программист -- это чёткость ума и точность формулировок.
Если бы вы сформулировали задачу как "найти идентификатор строки с максимальным..." -- то ваш ответ блестяще бы подошёл под условия задачи. Да, бывает, что некоторые начинающие не знают о существовании конструкции 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 либо вся строка.
Надеюсь, информация из моего ответа поможет сделать более осознанный выбор.
Комментариев нет:
Отправить комментарий