powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка
13 сообщений из 13, страница 1 из 1
Выборка
    #33187345
pax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pax
Гость
Народ, помогите написать запрос - есть таблица, у ней из последних 20 строк надо по определенному рангу (задается строчкой в ней числа от 0 до 10) вытащить данные.

Как упорядочить сначала по id, потом в этом же запросе по rang?
...
Рейтинг: 0 / 0
Выборка
    #33187924
Steven13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Без структуры таблицы трудно понять.

Насколько я понял, достаточно:
Код: plaintext
order by rang, id
...
Рейтинг: 0 / 0
Выборка
    #33188480
pax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pax
Гость
TABLE `news` (
`news_id` int(11) NOT NULL auto_increment,
`news_head` varchar(250) NOT NULL default '',
`news_text` text NOT NULL,
`news_im` varchar(50) default NULL,
`news_other` varchar(200) default NULL,
`tm` varchar(10) NOT NULL default '00:00',
`str_id` int(11) NOT NULL default '0',
`count` int(11) NOT NULL default '0',
`avtor` varchar(100) default NULL,
`ist` varchar(100) default NULL,
`ist_link` varchar(100) default NULL,
`rang` tinyint(4) NOT NULL default '0',
PRIMARY KEY (`news_id`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;


Здесь надо взять последних 20 по news_id и из них первыми выдавать тех, у кого больше ранг
...
Рейтинг: 0 / 0
Выборка
    #33188585
Фотография Berkut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
... order by news_id DESC, rang DESC limit  0 , 20 
...
Рейтинг: 0 / 0
Выборка
    #33188606
Ekshibarov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
select * from (select * from news order by news_id desc limit  20 ) as news_tmp
order by news_tmp.username desc 
Правда если версия mysql >=4.1
...
Рейтинг: 0 / 0
Выборка
    #33188641
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А причём тут вообще username?
...
Рейтинг: 0 / 0
Выборка
    #33188799
pax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pax
Гость
у меня стоит версия 3.23.39

>>> order by news_id DESC, rang DESC limit 0,20

так упорядочивает только по news_id :(
Пробовал

>>>select * from (select * from news order by news_id desc limit 20) as news_tmp
order by news_tmp.username desc

не работает, думаю из-за версии
...
Рейтинг: 0 / 0
Выборка
    #33188882
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну сделайте в два запроса через временную таблицу?
...
Рейтинг: 0 / 0
Выборка
    #33189356
pax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pax
Гость
CREATE TEMPORARY TABLE tmp (
news_id INT(11) UNSIGNED DEFAULT '0' NOT NULL);

LOCK TABLES news read;

INSERT INTO tmp SELECT news_id
FROM news order by news_id limit 20;

SELECT news_id FROM news, tmp
WHERE news.news_id=tmp.news_id order by news.order;

UNLOCK TABLES;

DROP TABLE tmp;

Не пашет (
В чем мой косяк???
...
Рейтинг: 0 / 0
Выборка
    #33189361
Steven13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
paxу меня стоит версия 3.23.39

>>> order by news_id DESC, rang DESC limit 0,20

так упорядочивает только по news_id :(
Пробовал

>>>select * from (select * from news order by news_id desc limit 20) as news_tmp
order by news_tmp.username desc

не работает, думаю из-за версии

Сначало по рангу а потом по news_id. При помощи DESC - ASK последовательность.

Код: plaintext
order by rang DESC, news_id DESC limit  0 , 20 
...
Рейтинг: 0 / 0
Выборка
    #33189454
Zipo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не получится это сделать составным ордером.
Здесь можно выкрутиться через вложенный запрос или с помощью темповой таблицы. Оба метода здесь уже написали.
...
Рейтинг: 0 / 0
Выборка
    #33189484
Zipo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть еще 1 вариант, более простой и менее трудоемкий для БД.
Сначало выбираешь id:
select news_id from news order by news_id desc limit 20;
Потом выбираешь по этим id эти новости с сортировкой
select * from news where news_id in ("выбраные перед этим id новостей через запятую") order by rang;

Для версии которыя поддерживает вложенные запросы это выглядит немного проще:
select * from news where news_id in (select news_id from news order by news_id desc limit 20) order by rang;

Учитавая то, что IN использует индексы, работать будет быстро.
...
Рейтинг: 0 / 0
Выборка
    #33189586
pax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
pax
Гость
Спасибо
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Выборка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]