Autor | Zpráva | ||
---|---|---|---|
Jack06 Profil |
#1 · Zasláno: 11. 2. 2009, 11:00:18
$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 * |
#2 · Zasláno: 11. 2. 2009, 14:48:12
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 |
#3 · Zasláno: 11. 2. 2009, 15:11:06
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 |
#4 · Zasláno: 11. 2. 2009, 21:48:22 · Upravil/a: Jack06
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 * |
#5 · Zasláno: 12. 2. 2009, 08:45:33
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 |
||
Časová prodleva: 10 dní
|
|||
Jack06 Profil |
#6 · Zasláno: 22. 2. 2009, 16:31:06
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 |
#7 · Zasláno: 22. 2. 2009, 21:00:09
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 * |
#8 · Zasláno: 22. 2. 2009, 21:16:05
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 |
#9 · Zasláno: 23. 2. 2009, 15:18:07 · Upravil/a: Jack06
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 * |
#10 · Zasláno: 23. 2. 2009, 15:28:21
Jo to je jeden ze zůsobů. Pokud těch vybraných nicků není moc, nemusí to moc zpomalit.
|
||
Jack06 Profil |
#11 · Zasláno: 23. 2. 2009, 15:49:04
Kajman_
A je lepší způsob, kdyby jich bylo více?? |
||
Kajman_ Profil * |
#12 · Zasláno: 23. 2. 2009, 20:07:42
Při statisících či milionech už je lepší vymyslet jinou metodu.
|
||
Jack06 Profil |
#13 · Zasláno: 23. 2. 2009, 20:17:49
heh tak to nebude potřeba :-D
|
||
Časová prodleva: 15 let
|
0