powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Получение порядкового номера строки в запросе
25 сообщений из 45, страница 1 из 2
Получение порядкового номера строки в запросе
    #38737997
darkersoul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер, господа! Долго думал но все же так и не смекнул как сделать следующее.

Есть вот такая таблица с рейтингом


Делаю свертку по полю рейтинга и сложив необходимые мне столбцы


Мне необходимо при любой сортировке в запросе получать текущее место в рейтинге для каждого юзера, т.е. привязать номер 1 к строке с емейлом sa@ya.ru, номер 2 к user@ya.ru и т.д. Другими словами - надо средствами мускуля независимо получать место в рейтинге при сортировке по любому полю. Можно ли этого добиться без таблиц/столбцов-посредников и без лишних запросов и php-кода?
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38737998
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
darkersoul,

можешь сформулировать эту же самую задачу на простом псевдопримере, выделив только суть, потому что помочь хочется, а копаться в твоих сигнатурах не очень...
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38738086
darkersoul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lumix,

есть запрос, который формируется с учетом меняющихся фильтров и сортировки. в этом запросе при свертке образуется общий рейтинг в столбце *_result. так вот, необходимо иметь доступ в рамках запроса к этому столбцу отсортированном ВСЕГДА по убыванию, и чтобы из него можно было получить порядковый номер строки, которая соответствует текущему рейтингу в этой строке.

в общем что-то наподобие работы php функции array_search()
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38738272
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
darkersoulLumix,

есть запрос, который формируется с учетом меняющихся фильтров и сортировки. в этом запросе при свертке образуется общий рейтинг в столбце *_result. так вот, необходимо иметь доступ в рамках запроса к этому столбцу отсортированном ВСЕГДА по убыванию, и чтобы из него можно было получить порядковый номер строки, которая соответствует текущему рейтингу в этой строке.

в общем что-то наподобие работы php функции array_search()

всё равно не догоняю чего ты хочешь
array_search делает то же самое, что select id from table where key = 'some value'

способ получения номера строки в ЛЮБОМ запросе вот такой
Код: sql
1.
select @a := 0; SELECT t.*, @a := @a + 1 as rowId FROM (select ...) t


где (select ...) это вообще какой угодно запрос и какой угодно сложный запрос и неважно что он там делает
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38738780
darkersoul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lumix,

твой пример я понял, но это не то. Вот так мне надо сделать:

Поле rank должно вычисляться внутри запроса. Т.е. оно равно позиции текущего рейтинга в столбце общего рейтинга отсортированному по убыванию. Надеюсь будет понятно...



...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38738783
darkersoul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скрины не отобразились почему-то, вот их ссылки:
1 картинка - http://awesomescreenshot.com/0233fp8nec
2 картинка - http://awesomescreenshot.com/03e3fp8zcd
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38738789
darkersoul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
столбец full - это общий рейтинг
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38738824
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
darkersoulLumix,

твой пример я понял, но это не то. Вот так мне надо сделать:

Поле rank должно вычисляться внутри запроса. Т.е. оно равно позиции текущего рейтинга в столбце общего рейтинга отсортированному по убыванию. Надеюсь будет понятно...


нет мне до сих пор не понятно чего ты хочешь
ты так долго варился в своем проекте, что тебе многие вещи кажутся очевидными, а для того, кто видит все эти таблицы вновь это просто абра-кадабра

я реально до сих пор не могу понять чего ты хочешь именно поэтому и прошу тебя переформулируй суть этой задачи на простом примере с использованием данных типа яблоки, апельсины, бананы
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38738928
darkersoul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lumix,

мне нужно поле Rank (место в рейтинге) , посчитанное на основании данных из свернутого столбца sum(Rating_result). Не знаю уже как проще, бананы и прочие фрукты тут некуда пристроить ...
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38738934
darkersoul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне нужен столбец #

варианты сортировки

1


2
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38738941
darkersoul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
3
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38738943
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
darkersoul,

а чем тебя мое решение не устраивает? возьми мое решение, засунь в него свой запрос переименуй мой rowId в свой Rank и будет тебе счастье....

а самое главное, я не пойму, что тебе мешает проставлять этот номер на клиенте, ведь в sql ты ведь его никак не используешь...
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38738970
darkersoul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lumix,

при твоем запросе rowId не привязывается к sum(Rating_result).
этот столбец всего лишь инкремент. Я показал выше как надо, что тебе еще не понятно :\

...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38738975
darkersoul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как раз этот столбец нужен для использования. Просто получается физически его не существует.
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38739003
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
darkersoulКак раз этот столбец нужен для использования. Просто получается физически его не существует.
где использовать?
если просто для индикации - тебе подсказали, если в дальнейших вариациях то заведи поле и после работы предложенного - проадейть эта поля.
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38739006
darkersoul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,

ты прочитал полностью стартовое сообщение? в нем сказано "Можно ли этого добиться без таблиц/столбцов-посредников и без лишних запросов и php-кода?"

а использовать его можно например при получении сведений о юзере, в которых будет инфа о его ТЕКУЩЕМ месте в ОБЩЕМ рейтинге.

по сути, больше интересует вопрос оптимизации, по сути хочется вместо двух запросов делать один.
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38739008
darkersoul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хотя новое поле с его апдейтом будет лучше чем постоянный расчет этого поля при каждом запросе
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38739023
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
darkersoulLumix,
при твоем запросе rowId не привязывается к sum(Rating_result).


я не совсем понимаю что ты имеешь ввиду под словам ПРИВЯЗЫВАТЬСЯ

darkersoulэтот столбец всего лишь инкремент. Я показал выше как надо, что тебе еще не понятно :\

чтобы номера соответствовали как ты нарисовал красными стрелочками, то тебе в запросе надо заменить order by rating_num_bets на order by rating_result desc и тогда соответствие будет как ты нарисовал стрелочками

а если ты в итоге хочешь получить сортировку по rating_num_bets то оберни тогда всю эту бодягу ещё в один селекет свыше

Код: sql
1.
select * from ( ... а тут весь твой нижний запрос с order by rating_result ... ) t order by rating_num_bets
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38739031
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторselect * from ( ... а тут весь твой нижний запрос с order by rating_result ... ) t order by rating_num_bets
и так каждый раз когда нужно вывести что-то....
оно конечно будет работать, только каждый раз вставлять такой гемор в код PHP, даже если сделать вьюшку - тоже не подарок
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38739032
darkersoul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lumix,

жаль, но все же ты меня так и не понял. причем тут Rating_num_bets?

я тут почитал, мне нужна temporary table
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38739060
darkersoul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Теперь непонятно почему временная таблица возвращает поле rank в обратном порядке, мне нужен 1,2,3



Если сделать @i := @i - 1 то rank будет -3,-2,-1 что даже не -1,-2,-3... Т.е. как будто order by не работает при создании врем. таблицы
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38739074
darkersoul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
получилось решить только с помощью двух временных таблиц

Код: sql
1.
2.
3.
create temporary table tt1 select Rating_user_id uid, sum(Rating_result) full from h4m_rating where Rating_enabled = 1 group by Rating_user_id order by full desc;
select @i := 0;
create temporary table tt2 select @i := @i + 1 as rank, uid, full from tt1;



и потом использовать ее в подзапросе в главном запросе

Код: sql
1.
SELECT (select rank from tt2 where full = sum(Rating_result) limit 1) AS `rank`, `h4m_rating`.`id`, `Rating_enabled`, `Rating_user_id`, `Rating_bet_id`, `Rating_event_id`, `Rating_date`, `u`.`User_email` AS `Rating_user_email`, sum(Rating_num_bets) AS `Rating_num_bets`, sum(Rating_num_wbets) AS `Rating_num_wbets`, sum(Rating_result) AS `Rating_result` FROM `h4m_rating` JOIN `h4m_users` `u` ON `h4m_rating`.`Rating_user_id` = `u`.`id` WHERE h4m_rating.Rating_enabled = '1' GROUP BY Rating_user_id ORDER BY `Rating_result` ASC LIMIT 15 OFFSET 0



в итоге у меня выводится место в рейтинге привязанным к юзеру при любой сортировке и не пришлось использовать поле-посредник. всем спасибо за внимание и советы.
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38739077
darkersoul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38739084
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
darkersoulLumix,

жаль, но все же ты меня так и не понял. причем тут Rating_num_bets?

при том, что именно по этому полю у тебя была сортировка в самом внутреннем запросе

darkersoulя тут почитал, мне нужна temporary table

))))
ты наверное будешь удивлен, но подзапросы это и есть временные таблицы
например:

Код: sql
1.
select * from (select * from ( select * from a ) t2 ) t1 



во время выполнения этого запроса будет создано две временные таблицы t1 и t2
то, что ты сделал на временных таблицах - это просто более громоздкая запись
ну и ты использовал временные таблицы просто для прочистки своих мозгов, чтобы тебе самому понятнее было что в каком порядке выполняется, но когда руку набьешь, то сможешь такие шняги мутить просто на вложенных запросах
...
Рейтинг: 0 / 0
Получение порядкового номера строки в запросе
    #38739085
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяавторselect * from ( ... а тут весь твой нижний запрос с order by rating_result ... ) t order by rating_num_bets
и так каждый раз когда нужно вывести что-то....
оно конечно будет работать, только каждый раз вставлять такой гемор в код PHP, даже если сделать вьюшку - тоже не подарок

если использование подобных запросов это слишком больно для твоего кода, значит с архитектурой твоего приложения что-то не так... значит что архитектура тебя слишком ограничивает... в хорошей архитектуре и не такие кренделя можно мутить и все будет комфортно...
...
Рейтинг: 0 / 0
25 сообщений из 45, страница 1 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Получение порядкового номера строки в запросе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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