Autor Zpráva
Vanama
Profil *
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 *
Zkuste si explain.
Vanama
Profil *
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 *
Co si zkusit jos_puarcade připojit již zgroupované?
Vanama
Profil *
Omlouvám se, můžete mi prosím napsat nějaký příklad? Nevím jak to mám napsat, díky.
Kajman_
Profil *
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 *
Děkuji mockrát, už to frčí :D
Toto téma je uzamčeno. Odpověď nelze zaslat.