Autor | Zpráva | ||
---|---|---|---|
medden Profil * |
#1 · Zasláno: 12. 2. 2006, 13:39:05
Zdravím,
mám nasledujúci (škaredý) select:
Čo to zhruba robí: vytiahne z databázy konfiguračné nastavenia (meno, hodnota) a prislúchajúcu aplikáciu. Jedná sa o to, že nastavenie môže byť: užívateľské, skupinové, globálne (sú zoradené podľa priority: ak užívateľ nemá svoje nastavenie, použije sa skupinové, a ak ani to nie je, tak globálne). Doteraz som to zvládol, všetko to mám pekne spravené v tom selecte, len to má jednu chybičku: vracia to všetky nastavenia, nie iba tie, čo potrebujem. Teda, vracia mi to aj globálne, aj skupinové, aj užívateľské nastavenia, nie iba to nastavenie s najvyššou prioritou. Ono by sa to síce dalo spracovať, ale ide o to, že tých nastavení môže byť riadna kopa (keďže každý užívateľ si môže všetko nastaviť) a bol by to zbytočne veľký prenos dát. Skúšal som to riešiť cez DISTINCT, trik, ale nepodarilo sa... Ešte štruktúra pre configy (Na ostatných príliš nezáleží, sú len na získanie aplikácie.): CREATE TABLE `edenus_configs` ( `id` int(11) NOT NULL auto_increment, `name` varchar(40) collate utf8_slovak_ci NOT NULL default '', `value` text collate utf8_slovak_ci NOT NULL, `application_id` int(11) NOT NULL default '0', `user_id` int(11) default '0', `group_id` int(11) default '0', /* ešte nejaké veci, indexy ... */ ) Vopred veľmi ďakujem :-) |
||
Kajman_ Profil * |
#2 · Zasláno: 12. 2. 2006, 13:58:21
ORDER BY
ifnull(`configs`.`user_id`, ifnull(`configs`.`group_id`, 'globalni hodnota')) DESC Teda jestli jsem to zběžným pohledem odhadl, cože vlastně chceš. |
||
medden Profil * |
#3 · Zasláno: 12. 2. 2006, 14:13:17
> Teda jestli jsem to zběžným pohledem odhadl, cože vlastně chceš.
Si zle odhadol :-) Asi som to zle formuloval, pokúsim sa o príklad: Z databázy mi prídu výsledky (z toho query vyššie): Riadok | Meno | Hodnota | aplikácia #1 | var | value1 | plugin #2 | var | value2 | plugin #3 | var | value3 | plugin #4 | xyz | value1 | plugin2 #5 | xyz | value2 | plugin2 Tento výsledok je už zoradený podľa priority: pre var sa použije #1, pre xyz #4. Teda ja potrebujem vyhodiť z výsledku riadky #2 #3 #5 aby sa mi neprenášali zbytočné dáta (tie riadky majú spoločné meno - var, xyz) |
||
Kajman_ Profil * |
#4 · Zasláno: 12. 2. 2006, 21:10:08
Tak na to možná stačí group by meno, aplikacia a na hodnotu dát max.
|
||
medden Profil * |
#5 · Zasláno: 13. 2. 2006, 15:53:08
> Tak na to možná stačí group by meno, aplikacia a na hodnotu dát max.
No to nejde, skôr by som potreboval niečo ako DISTINCT na jeden stĺpec. Síce som to vyriešil, ale musím priznať, že to žiadna sláva nie je...
Takže prvými podmienkami sa získajú konfigurácie pre danú skupinu a užívateľa, a potom vnoreným selectom sa získa maximálna priorita. Ale nie je to bohviečo, už pri malých dátach pri testovaní (20 - 30 hodnôt) to ide dosť pomaly :-( (asi 0.0045 sek) a tých premenných tam môže byť teda sakra veľa ... za hocijaký ďalší tip ďakujem, zatiaľ toto nechám ... |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0