|
|
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
Добрый вечер, господа! Долго думал но все же так и не смекнул как сделать следующее. Есть вот такая таблица с рейтингом Делаю свертку по полю рейтинга и сложив необходимые мне столбцы Мне необходимо при любой сортировке в запросе получать текущее место в рейтинге для каждого юзера, т.е. привязать номер 1 к строке с емейлом sa@ya.ru, номер 2 к user@ya.ru и т.д. Другими словами - надо средствами мускуля независимо получать место в рейтинге при сортировке по любому полю. Можно ли этого добиться без таблиц/столбцов-посредников и без лишних запросов и php-кода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 21:19:33 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
darkersoul, можешь сформулировать эту же самую задачу на простом псевдопримере, выделив только суть, потому что помочь хочется, а копаться в твоих сигнатурах не очень... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2014, 21:30:38 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
Lumix, есть запрос, который формируется с учетом меняющихся фильтров и сортировки. в этом запросе при свертке образуется общий рейтинг в столбце *_result. так вот, необходимо иметь доступ в рамках запроса к этому столбцу отсортированном ВСЕГДА по убыванию, и чтобы из него можно было получить порядковый номер строки, которая соответствует текущему рейтингу в этой строке. в общем что-то наподобие работы php функции array_search() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 01:01:59 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
darkersoulLumix, есть запрос, который формируется с учетом меняющихся фильтров и сортировки. в этом запросе при свертке образуется общий рейтинг в столбце *_result. так вот, необходимо иметь доступ в рамках запроса к этому столбцу отсортированном ВСЕГДА по убыванию, и чтобы из него можно было получить порядковый номер строки, которая соответствует текущему рейтингу в этой строке. в общем что-то наподобие работы php функции array_search() всё равно не догоняю чего ты хочешь array_search делает то же самое, что select id from table where key = 'some value' способ получения номера строки в ЛЮБОМ запросе вот такой Код: sql 1. где (select ...) это вообще какой угодно запрос и какой угодно сложный запрос и неважно что он там делает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 10:41:27 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
Lumix, твой пример я понял, но это не то. Вот так мне надо сделать: Поле rank должно вычисляться внутри запроса. Т.е. оно равно позиции текущего рейтинга в столбце общего рейтинга отсортированному по убыванию. Надеюсь будет понятно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 15:36:31 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
скрины не отобразились почему-то, вот их ссылки: 1 картинка - http://awesomescreenshot.com/0233fp8nec 2 картинка - http://awesomescreenshot.com/03e3fp8zcd ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 15:38:36 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
столбец full - это общий рейтинг ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 15:42:56 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
darkersoulLumix, твой пример я понял, но это не то. Вот так мне надо сделать: Поле rank должно вычисляться внутри запроса. Т.е. оно равно позиции текущего рейтинга в столбце общего рейтинга отсортированному по убыванию. Надеюсь будет понятно... нет мне до сих пор не понятно чего ты хочешь ты так долго варился в своем проекте, что тебе многие вещи кажутся очевидными, а для того, кто видит все эти таблицы вновь это просто абра-кадабра я реально до сих пор не могу понять чего ты хочешь именно поэтому и прошу тебя переформулируй суть этой задачи на простом примере с использованием данных типа яблоки, апельсины, бананы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 16:05:36 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
Lumix, мне нужно поле Rank (место в рейтинге) , посчитанное на основании данных из свернутого столбца sum(Rating_result). Не знаю уже как проще, бананы и прочие фрукты тут некуда пристроить ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 17:33:41 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 17:38:55 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 17:42:20 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
darkersoul, а чем тебя мое решение не устраивает? возьми мое решение, засунь в него свой запрос переименуй мой rowId в свой Rank и будет тебе счастье.... а самое главное, я не пойму, что тебе мешает проставлять этот номер на клиенте, ведь в sql ты ведь его никак не используешь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 17:50:28 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
Lumix, при твоем запросе rowId не привязывается к sum(Rating_result). этот столбец всего лишь инкремент. Я показал выше как надо, что тебе еще не понятно :\ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 18:24:47 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
Как раз этот столбец нужен для использования. Просто получается физически его не существует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 18:27:12 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
darkersoulКак раз этот столбец нужен для использования. Просто получается физически его не существует. где использовать? если просто для индикации - тебе подсказали, если в дальнейших вариациях то заведи поле и после работы предложенного - проадейть эта поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 18:52:01 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
вадя, ты прочитал полностью стартовое сообщение? в нем сказано "Можно ли этого добиться без таблиц/столбцов-посредников и без лишних запросов и php-кода?" а использовать его можно например при получении сведений о юзере, в которых будет инфа о его ТЕКУЩЕМ месте в ОБЩЕМ рейтинге. по сути, больше интересует вопрос оптимизации, по сути хочется вместо двух запросов делать один. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 18:57:36 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
хотя новое поле с его апдейтом будет лучше чем постоянный расчет этого поля при каждом запросе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 19:00:46 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
darkersoulLumix, при твоем запросе rowId не привязывается к sum(Rating_result). я не совсем понимаю что ты имеешь ввиду под словам ПРИВЯЗЫВАТЬСЯ darkersoulэтот столбец всего лишь инкремент. Я показал выше как надо, что тебе еще не понятно :\ чтобы номера соответствовали как ты нарисовал красными стрелочками, то тебе в запросе надо заменить order by rating_num_bets на order by rating_result desc и тогда соответствие будет как ты нарисовал стрелочками а если ты в итоге хочешь получить сортировку по rating_num_bets то оберни тогда всю эту бодягу ещё в один селекет свыше Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 19:18:58 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
авторselect * from ( ... а тут весь твой нижний запрос с order by rating_result ... ) t order by rating_num_bets и так каждый раз когда нужно вывести что-то.... оно конечно будет работать, только каждый раз вставлять такой гемор в код PHP, даже если сделать вьюшку - тоже не подарок ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 19:28:53 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
Lumix, жаль, но все же ты меня так и не понял. причем тут Rating_num_bets? я тут почитал, мне нужна temporary table ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 19:30:10 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
Теперь непонятно почему временная таблица возвращает поле rank в обратном порядке, мне нужен 1,2,3 Если сделать @i := @i - 1 то rank будет -3,-2,-1 что даже не -1,-2,-3... Т.е. как будто order by не работает при создании врем. таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 20:21:07 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
получилось решить только с помощью двух временных таблиц Код: sql 1. 2. 3. и потом использовать ее в подзапросе в главном запросе Код: sql 1. в итоге у меня выводится место в рейтинге привязанным к юзеру при любой сортировке и не пришлось использовать поле-посредник. всем спасибо за внимание и советы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 20:52:20 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 20:54:14 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
darkersoulLumix, жаль, но все же ты меня так и не понял. причем тут Rating_num_bets? при том, что именно по этому полю у тебя была сортировка в самом внутреннем запросе darkersoulя тут почитал, мне нужна temporary table )))) ты наверное будешь удивлен, но подзапросы это и есть временные таблицы например: Код: sql 1. во время выполнения этого запроса будет создано две временные таблицы t1 и t2 то, что ты сделал на временных таблицах - это просто более громоздкая запись ну и ты использовал временные таблицы просто для прочистки своих мозгов, чтобы тебе самому понятнее было что в каком порядке выполняется, но когда руку набьешь, то сможешь такие шняги мутить просто на вложенных запросах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 21:16:22 |
|
||
|
Получение порядкового номера строки в запросе
|
|||
|---|---|---|---|
|
#18+
вадяавторselect * from ( ... а тут весь твой нижний запрос с order by rating_result ... ) t order by rating_num_bets и так каждый раз когда нужно вывести что-то.... оно конечно будет работать, только каждый раз вставлять такой гемор в код PHP, даже если сделать вьюшку - тоже не подарок если использование подобных запросов это слишком больно для твоего кода, значит с архитектурой твоего приложения что-то не так... значит что архитектура тебя слишком ограничивает... в хорошей архитектуре и не такие кренделя можно мутить и все будет комфортно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2014, 21:20:37 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38739006&tid=1834266]: |
0ms |
get settings: |
11ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 330ms |

| 0 / 0 |
