nemakuphp Posted May 24, 2012 Report Posted May 24, 2012 Ir 3 tabulas items id | name 1 | Test 2 | Name items_users user_id | item_id | action1 | action2 1 | 1 | 0 | 1 2 | 1 | 1 | 1 1 | 2 | 1 | 0 items_groups group_id | item_id | action1 | action2 1 | 1 | 1 | 1 2 | 1 | 1 | 0 items_users un items_groups tabulās pie viena item_id var būt vairāki ieraksti, action1 un action2 ir vai nu 1 vai 0 Vai ir iespējams vienā kverijā iegūt apmēram sekojošo rezultātu, norādot user_id un iespējamos group_id? (pieņemsim, ka user_id = 1, un lietotājs ir grupā 2 id | name | action1 | action2 1 | Test | 1 | 1 (Respektīvi tiek paņemta lielākā vērtība vai nu no grupas vai lietotāja) 2 | Name | 1 | 0 Quote
briedis Posted May 24, 2012 Report Posted May 24, 2012 Es nezinu vai tas būs efektīvākais veids un vai vispār strādās, bet iztēlojos, ka varētu lietot UNION un tad no apakšvaicājuma izvilkt MAX, piemēram SELECT MAX(col) FROM ( SELECT col1 AS col FROM table1 WHERE .. UNION SELECT col2 AS col FROM table1 WHERE .. UNION SELECT colX AS col FROM table2 WHERE.. ) ..vai arī izvelc no katras tabulas MAX apakšvaicājumā, un tad no šiem max izvelc vēl vienu MAX () :) Quote
nemakuphp Posted May 24, 2012 Author Report Posted May 24, 2012 Pagaidām ienāca prātā labāks risinājums, tās 2 tabulas aizstāt ar vienu, papildus norādot tas ir lietotājs vai grupa, laikam arī pie šī varianta palikšu Quote
xPtv45z Posted May 24, 2012 Report Posted May 24, 2012 (edited) Es veidotu kaut kā šādi, pēc tam attiecigi pārbaudītu lielāks par/vienāds ar 0. SELECT SUM(items_groups.action1 + items_users.action1) as action1, ... FROM items LEFT JOIN items_groups ... LEFT JOIN items_users ... GROUP BY items.id Ja SUM tādā veidā nedarbojas var arī mēģināt kā SUM(items_groups.action1) + SUM(items_groups.action1) as action1 Edited May 24, 2012 by xPtv45z Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.