Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выборка записи с макисмальным ID. 
:(
    Опции темы
Mal Hack
Дата 8.1.2005, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Вопрос такой. Есть таблица. 1 поле - ID - счетчик , второе - текст.
Надо выбрать 10 последних символов текстового поля в той записи у которой ID - максимален.
Сделал так:
Код

SELECT `id` , SUBSTRING( `message` FROM ( LENGTH( `message` ) -10 ) ) AS text
FROM `game` ORDER BY `id` DESC LIMIT 1

Но вот нельзя ли через MAX(`id`) сделать? Пробовал по разному писал либо "неизвестное поле в услдевии WHERE" или "Неправильное применение группопой функции".
PM ICQ   Вверх
Secandr
Дата 8.1.2005, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 6
Всего: 39



Это единственный вариант который я знаю.

только вот
Цитата
SUBSTRING( `message` FROM ( LENGTH( `message` ) -10 ) )
слишком не красиво!
Жаль тетрадки под рукой нет, вроде можно покороче записать.


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Mal Hack
Дата 8.1.2005, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Secandr
Если будет возможность, подскажи, как покорооче.
PM ICQ   Вверх
Secandr
Дата 8.1.2005, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 6
Всего: 39



Так лень по манам лазитьsmile

Код
SELECT `id` , RIGHT(`message`,10) AS text FROM `game` ORDER BY `id` DESC LIMIT 1


Цитата
RIGHT(str,len)
Returns the rightmost len characters from the string str:
mysql> SELECT RIGHT('foobarbar', 4);
        -> 'rbar'

This function is multi-byte safe.



--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Mal Hack
Дата 8.1.2005, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Спасибо...
Вроде страницу со строковыми функциями два раза просмотрел... И главно RIGHT заметил, но не обратил внимание на смысл...
Спасибо. +1.
PM ICQ   Вверх
Kesh
Дата 9.1.2005, 01:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



Mal Hack Через MAX(`id`) сделать можно... но уж очень это некрасиво (читай "долго") будет... Т.к. для выбора максимального значения придется просмотреть весь объем выборки... С приемом ORDER BY такого не будет, т.к. будет браться максимальное значение ключа (который уже упорядочен, так уж они (ключи) устроены...) Это все, разумеется, если поле id - ключевое... Если же нет - то внутренняя сортировка и только потом выбор значения...

Ну и так... для примера... Думаю - должно сработать...
Код
SELECT `id` , RIGHT(`message`,10) AS text FROM `game` WHERE `id`=(SELECT MAX(`id`) FROM `game`)

По крайней мере на 4.1.7 сработало...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Mal Hack
Дата 9.1.2005, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Kesh
Вариант с подзапросом я не рассматривал вовсе... Уж слишком не экономно..
PM ICQ   Вверх
Kesh
Дата 9.1.2005, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



А оно по другому не получается... Оно и в мануале так написано... Есть еще правда один способ с обработкой строковых значений... Но он уж и вовсе не красивее и не экономнее...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Secandr
Дата 9.1.2005, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 6
Всего: 39



Kesh Подзапросы только в 5ом mysql поддерживаются!


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Kesh
Дата 9.1.2005, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



Secandr Проверял на 4.1.7...


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Secandr
Дата 9.1.2005, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 6
Всего: 39



Kesh надо проверить. У меня 4.0.22

Специально обновил список пакетов стабильных для дебиана. Последний стабильный Version: 4.0.22-2

так что пока я без вложеных запросов живу smile


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Mal Hack
Дата 9.1.2005, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



PM ICQ   Вверх
Kesh
Дата 9.1.2005, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 15
Всего: 54



Цитата
3.5.2 Строка, содержащая максимальное значение некоторого столбца
"Как определить номер, дилера и цену самого дорогого изделия?"

В ANSI SQL это легко делается при помощи вложенного запроса:

Код

SELECT article, dealer, price
FROM   shop
WHERE  price=(SELECT MAX(price) FROM shop)


В MySQL (в котором вложенные операторы SELECT еще не реализованы) такая задача выполняется в два этапа:

Следует получить максимальное значение цены из таблицы при помощи оператора SELECT.
Используя это значение, необходимо составить следующий запрос:
Код

SELECT article, dealer, price
FROM   shop
WHERE  price=19.95


Существует еще одно решение: отсортировать все строки по убыванию цен и после этого получить первую строку, используя специальный оператор LIMIT:

Код

SELECT article, dealer, price
FROM   shop
ORDER BY price DESC
LIMIT 1


Примечание: если существует несколько самых дорогих изделий (например, каждое из них стоит 19,95), запрос, использующий LIMIT, возвращает лишь одно из них!


Добавлено @ 13:41
Или даже вот...
Цитата
3.5.2 Строка, содержащая максимальное значение некоторого столбца
"Как определить номер, дилера и цену самого дорогого изделия?"

В ANSI SQL (и MySQL 4.1) это легко делается при помощи вложенного запроса:

Код

SELECT article, dealer, price
FROM   shop
WHERE  price=(SELECT MAX(price) FROM shop)


В версиях MySQL до 4.1 такая задача выполняется в два этапа: ...

Добавлено @ 13:45
Mal Hack Точно... с 4.1 а то я систему обновил, а в мануал как-то не глянул.. будем теперь пользоваться... smile +1


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Secandr
Дата 9.1.2005, 13:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 6
Всего: 39



Жду выхода 4.1 под дебиан


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0565 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.