Autor Zpráva
Jack06
Profil
  $a      = $join_db->query("select nick from ".$prefix."users where  prava < '3'");  // vyber vsechny krom adminu mistnosti
                 while($ac = $a->fetch_assoc()){ 
  $c      = $join_db->query("select nick from ".$_GET['rid']."_ss");  // vyber ss mistnosti
                 while($check_ss = $c->fetch_assoc()){ 
            $ss_array = array();
  $rand   = $join_db->query("select nick from room_online where r_id = '".$_GET['rid']."' && nick = '".$ac['nick']."' && nick <> '".$check_ss['nick']."' ");
                 while($u_rand = $rand->fetch_array()){ // vysledkem jsou vsichni uzivatele, kteri nejsou ss
  $check  = $join_db->query("select * from room_online where r_id = '".$_GET['rid']."' && ds ='1'");
  if($check->fetch_array()){
  }else{
            $ss_array[] = $u_rand[0];
  $rander = $ss_array[rand(0,count($ss_array)-1)];
  
  $pridej_s  = 'Jsi nový správce místnosti';
  $ds        = "Systém předal automaticky správce uživateli -> $rander";
            $join_db->query("UPDATE room_online set ds='1' WHERE nick='$rander' && r_id='".$_GET['rid']."'");
            $join_db->query("INSERT INTO ".$_GET['rid']."_text VALUES('','$syst_small_text','','all','$ds')");
            $join_db->query("INSERT INTO ".$_GET['rid']."_text VALUES('','$syst_big_text','$system','$rander','$pridej_s')");
  }
  }
  }
  }


Mám problém u podmínky, kdy mi to prostě vypíše i nicky které jsem dal do podmínky že se vypsat nesmí nevíte proč.??:

V podmínce mám aby mi $ac['nick'] vypsalo lidi jen s pravama mensima jak 3 a v podmince nize aby to z mistnosti vybralo jen ty lidi co je maj menší, ale ono to vybere i ty co maj větší práva :-(
 $rand   = $join_db->query("select nick from room_online where r_id = '".$_GET['rid']."' && nick = '".$ac['nick']."' && nick = '".$check_ss['nick']."' ");
Kajman_
Profil *
No to je hrůza, chudák db server :-)

Když si budete vypisovat chyby dotazů, tak nejspíš upozorní na to, že v sql se používá and a ne &&. Takhle máte chybný dotaz, takže to skočí vždy do else a ne jen, když je dotaz dobře a vrátí nulový počet řádků.
Joker
Profil
Jack06
Téda. A ten kód dělá co, to je zátěžový test databázového serveru? :)
Počítám dobře, že bude-li dejme tomu celkem 50 uživatelů, z toho 2 admini a 5 uživatelů v dané místnosti, provede se celkem (1 + 48 + 48*5 + 48*5 =) 529 SQL dotazů (případně ještě plus tři)?!
Jack06
Profil
Kajman_
Jo to jsem pak předělal, ale stejně to nejede

Joker
Jiný nápad jak splnit podmínku výběru.. Jinak mě to nenapadá..

Vybere to správce, kterej není stálým správcem a má menší práva jak administrátor a je v dané místnosti
Kajman_
Profil *
Předělal jste to tak, že ošetřujete špatné dotazy a vypisujete si případný mysql_error?

Jinak mě to nenapadá..
Možná Vám unikla v SQL možnost spojování tabulek.
http://www.linuxsoft.cz/article.php?id_article=827 + navazující články
Jack06
Profil
Prosím.. můžete mi s tím pomoci.. Nevím jak udělat ty podmínky. skouším to, ale buď mi to nic nevypíše, nebo mi to vypíše co nechci.

Princyp je:

Vybrat uživatele, který:
není ss (viz tabulka ".$_GET['rid']."_ss")
má menší práva jak 3 ( viz tabulka ".$prefix."users)
a je v místnosti (viz tabulka room_online where r_id = '".$_GET['rid']."')

Nevím, jak tyto podmínky splnit aby mi to vypsalo uživatele, kteří prošli filtrem..
Skouším to od posledního přízpěvku zde a stále se nedaří.. spojování tabulek ještě tak moc nechápu.. Děkuji předem
Jack06
Profil
Tak jsem to vyřešil takto:

  $sel    = $join_db->query("select users.nick, users.law, ".$_GET['rid']."_ss.nick, online.nick as vypis 
                            from users, ".$_GET['rid']."_ss, online 
                            where users.nick = online.nick AND online.nick <> ".$_GET['rid']."_ss.nick AND users.law < 3"); 

Už je to dobré, nebo to jde ještě nějak lépe?? Děkuji
Kajman_
Profil *
Dělat tabulky $_GET['rid']."_ss" je chybný přístup. Možná by to mohlo vypadat takto nějak...

select u.*
from `users` u
join online r on u.nick=r.nick and u.law<3
left join {$_GET[rid]}_ss s on r.nick=s.nick
where s.nick is null
Jack06
Profil
Kajman_
A myslíš, že by k tomu šlo aby z těch nicků, které projdou podmínkami vybral jeden náhodně?? asi přez rand že.?? Akorád nevím kam ten rand dát :-(

nakonec ORDER BY RAND() LIMIT 1 ??
Kajman_
Profil *
Jo to je jeden ze zůsobů. Pokud těch vybraných nicků není moc, nemusí to moc zpomalit.
Jack06
Profil
Kajman_
A je lepší způsob, kdyby jich bylo více??
Kajman_
Profil *
Při statisících či milionech už je lepší vymyslet jinou metodu.
Jack06
Profil
heh tak to nebude potřeba :-D

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: