|
|
|
Значение стобца на основе максимального значения в строке выборки.
|
|||
|---|---|---|---|
|
#18+
Тему назвал как мог, сильно не пинайте. Объяснить задачу коротко не получается. Есть таблицы: users (id_user, tariff, всякие другие поля) corporations (id_corp, corp, tariff, всякие другие поля) corp_users (id, corp, user) parties (id_party, party, tariff, всякие другие поля) party_users (id, party, user) tariffs (id_tariff, tariff, tariff_rights_user, всякие другие поля) Тарифы задают права пользователя, права корпорации и права партии (три столбца, интересует только первый). Причём корпоративные тарифы и партийные тарифы могут повышать права пользователя. То есть для определения прав пользователя надо выбрать максимальное значение из трёх. Это у меня получилось сделать. Но теперь не пойму можно ли в этом же запросе или отдельно одним запросом, определить по какому тарифу назначены права? Ниже запрос по которому можно вывести таблицу пользователей с окончательными правами. Собственно в идеале вывести третий столбец tariff_name - которые будет равен t_user.tariff, t_corp.tariff или t_party.tariff в зависимости от того что выбрано GREATEST. SELECT users.user, GREATEST(t_user.tariff_rights_user, t_corp.tariff_rights_user, t_party.tariff_rights_user) FROM users inner join tariffs t_user on t_user.id_tariff=users.tariff inner join corporation_users on corporation_users.user=users.id_user inner join corporations on corporations.id_corp=corporation_users.corp inner join tariffs t_corp on t_corp.id_tariff=corporations.corp_tariff inner join party_users on party_users.user=users.id_user inner join parties on party_users.party=parties.id_party inner join tariffs t_party on t_party.id_tariff=parties.party_tariff Это вообще реально сделать или проще не насиловать себе мозг и на PHP это сделать с несколькими запросами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 10:57:45 |
|
||
|
Значение стобца на основе максимального значения в строке выборки.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 11:16:52 |
|
||
|
Значение стобца на основе максимального значения в строке выборки.
|
|||
|---|---|---|---|
|
#18+
Добрый Э - Эх, Там нет ничего похожего на мою задачу. Мне надо определить из какой таблице в итоге берётся значение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 12:48:06 |
|
||
|
Значение стобца на основе максимального значения в строке выборки.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 13:29:40 |
|
||
|
Значение стобца на основе максимального значения в строке выборки.
|
|||
|---|---|---|---|
|
#18+
SharuPoNemnogu, Это судя по всему то что мне нужно! ) Просто не особо понимал даже как гуглить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 13:39:03 |
|
||
|
Значение стобца на основе максимального значения в строке выборки.
|
|||
|---|---|---|---|
|
#18+
Я видимо не совсем корректно описал задачу... С кейсами всё отлично получается, в плане определения имени столбца, но нужно получить не просто имя, а имя в таком виде в котором его дальше можно использовать в SQL, точнее нужно получить название тарифа... Итого запрос получился вот таким, не знаю насколько это через седалищный нерв, но мне пока только такой вариант в голову пришёл. Если кто знает как это можно сделать проще, буду очень признателен. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 16:44:25 |
|
||
|
Значение стобца на основе максимального значения в строке выборки.
|
|||
|---|---|---|---|
|
#18+
DeMonyan, если все работает как вы хотите -- то и ладно. но... у одного юзера сколько партий и сколько корпораций может быть? если только по ноль или одной -- то вроде сработает. Но если есть многопартийцы или многокорпоратиовшики , то появятся множественые линии с одним и темже юзером. Т.е. если человек в 3-х партиях и в 3-х корпорациях -- вы имеет 9 комбинаций, в каждой будет 3 тарифа юсера-партии-корпорации. я бы собрал (UNION 3 селекта) 7 записей -- отдельно тариф юзера (юзеров), 3 тарифа партии (каждого юзера) и 3 тарифа от корпорации (каждого юзера) и свел задачу к Ф.А.К. http://www.sql.ru/forum/687908/faq-vyborka-pervoy-posledney-zapisi-v-gruppah ...или сделал бы таки на PHP... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2016, 05:03:10 |
|
||
|
Значение стобца на основе максимального значения в строке выборки.
|
|||
|---|---|---|---|
|
#18+
javajdbc, Партии и корпорации могут быть несколько, но там свои тонкости в этих случаях. конкретно в этот запрос партия или корпорация попадать будет только одна! ) Просто не хочу лишней информацией нагружать людей, мне и так очень сильно помогли, ибо о существовании CASE в селекте я даже не догадывался. )) Логика то правильно срабатывает, но было подозрение, что можно упростить запрос. И как оказалось действительно можно. Вместо подзапросов вполне можно использовать имена столбцов в кейсах. Сразу пытался так сделать, но почему-то мускул на меня ругался, в итоге сделал подзапросы, но вчера попробовал ещё раз с именами столбцов и всё отлично сработало. Спасибо всем! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2016, 07:29:23 |
|
||
|
|

start [/forum/topic.php?fid=47&gotonew=1&tid=1832260]: |
0ms |
get settings: |
6ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
195ms |
get topic data: |
12ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 523ms |

| 0 / 0 |
