Autor | Zpráva | ||
---|---|---|---|
Vanama Profil * |
#1 · Zasláno: 27. 1. 2009, 14:15:04
Ahoj lidičky, narazil jsem na problém, který nějak neumím sám vyřešit. Je to psaný pro joomlu, proto tabulky začínají #__.
Mám dotaz: $query = "Select sum(highscore) as highscorecount,sum(points) as points,sum(place) as places,userid,avatar,username from #__puarcade_leaders inner join #__comprofiler on (user_id = userid) inner join #__users on (#__users.id = userid) group by userid order by ".$sorting." DESC LIMIT ".$limit; k tomu mám mezi závorkama ve foreach ještě dotaz kde potřebuju zjistit počet řádků na kterých je uveden konkrétní uživatel: $database->setQuery( "SELECT count(*) FROM #__puarcade WHERE #__puarcade.userid = ".$leader->userid.";" ); Vše jede jak má, ale můj problém spočívá v tom, že bych toto potřeboval spojit do jednoho dotazu a když to napíšu následujícím způsobem, zatíží se mi šíleně DB a stránka hodí timeout. $query = "Select sum(highscore) as highscorecount,sum(points) as points,sum(place) as places,#__puarcade_leaders.userid,count(#__puarcade.userid) as scorecount,avatar,username from #__puarcade_leaders INNER JOIN #__puarcade on (#__puarcade.userid = #__puarcade_leaders.userid) inner join #__comprofiler on (user_id = #__puarcade_leaders.userid) inner join #__users on (#__users.id = #__puarcade_leaders.userid) group by #__puarcade.userid order by ".$sorting." DESC LIMIT ".$limit; Nevíte včem by mohl být problém, že rozděleně to jede v pohodě a spojené to hází timeout stránek? Za každou radu díky. PHP a MySQL verze 5 |
||
Kajman_ Profil * |
#2 · Zasláno: 27. 1. 2009, 14:39:49
Zkuste si explain.
|
||
Vanama Profil * |
#3 · Zasláno: 27. 1. 2009, 15:12:09
Nevím co přesně tím myslíte. Udělal jsem indexaci na tabulku #__puarcade, která má nejvíc řádků a pomocí explain jsem to vyjel. Nicméně těch řádků to probírá pořád stejný počet.
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE jos_puarcade_leaders ALL NULL NULL NULL NULL 14679 Using temporary; Using filesort 1 SIMPLE jos_puarcade index NULL XPKLeaderBoard 12 NULL 107551 Using where; Using index 1 SIMPLE jos_users eq_ref PRIMARY PRIMARY 4 zabavaonlinecz1.jos_puarcade_leaders.userid 1 1 SIMPLE jos_comprofiler eq_ref user_id user_id 4 zabavaonlinecz1.jos_users.id 1 Using where Podotýkám, že bez připojení tabulky puarcade to jede v pohodě a samostatný dotaz výše na tabulku puarcade probírá stejný počet řádků. |
||
Kajman_ Profil * |
#4 · Zasláno: 27. 1. 2009, 15:25:19
Co si zkusit jos_puarcade připojit již zgroupované?
|
||
Vanama Profil * |
#5 · Zasláno: 27. 1. 2009, 15:39:43
Omlouvám se, můžete mi prosím napsat nějaký příklad? Nevím jak to mám napsat, díky.
|
||
Kajman_ Profil * |
#6 · Zasláno: 27. 1. 2009, 15:44:44
select sum(highscore) as highscorecount, sum(points) as points, sum(place) as places, #__puarcade_leaders.userid, t.pocet as scorecount, avatar, username from #__puarcade_leaders inner join (select userid, count(*) pocet from #__puarcade group by userid) t on (t.userid = #__puarcade_leaders.userid) inner join #__comprofiler on (user_id = #__puarcade_leaders.userid) inner join #__users on (#__users.id = #__puarcade_leaders.userid) group by #__puarcade.userid order by ".$sorting." DESC LIMIT ".$limit; |
||
Vanama Profil * |
#7 · Zasláno: 27. 1. 2009, 15:53:27
Děkuji mockrát, už to frčí :D
|
||
Časová prodleva: 15 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0