Autor | Zpráva | ||
---|---|---|---|
Fastman Profil |
#1 · Zasláno: 3. 2. 2015, 20:40:13
Zdravím,
Už asi hodinu řeším, jak udělat správně SQL dotaz. Z tabulky "upload" se mi vypisuje veškerý výpis. V tomhle případě se vypíšou všichni autoři (uživatelé) co jsou v dané tabulce upload. $author2=$zaznam["author2"]; A zde pomocí tohoto, bych měl vyhledat údaj z druhé tabulky "users". Aby měl údaj `user`, tak jsem si ho vypůjčil od $author2. $dotazuser="SELECT * FROM users WHERE `user` = $author2"; //vytvoření sql dotazu $vysledekuser = MySQL_Query($dotazuser); // provedení sql dotazu echo "$vysledekuser"; //Zkoušel jsem, jestli se tady něco vypíše, bohuže nic. while ($zaznamuser = MySQL_Fetch_Array($vysledekuser)){ $iduser=$zaznamuser["id"]; $useruser=$zaznamuser["user"]; $bodyuser=$zaznamuser["body"]; } A ve finále jsem chtěl získat údaj $bodyuser, tabulka "body" se nachází v tabulce "users". Když to řeknu stručně, tak chci, aby z tabulky "upload" se vybrala všechna jména z pole "author2". Všechna jména, která se vyhledala, tak potřebuji, aby se vyhledala v tabulce "users" a vybrala pole "body". To potom zapsala do nějaké proměnné. Děkuji všem za odpověďi. |
||
Medvídek Profil |
#2 · Zasláno: 3. 2. 2015, 20:43:23
Fastman:
Hledáte zřejmě LEFT JOIN, kterým si obě tabulky spojíte a pak třeba přes GROUP BY author2 si necháte vrátit jen unikátní autory. |
||
Fastman Profil |
Medvídek:
„Hledáte zřejmě LEFT JOIN, kterým si obě tabulky spojíte a pak třeba přes GROUP BY author2 si necháte vrátit jen unikátní autory.“ Děkuji za odpověď. LEFT JOIN a GROUP BY vidím popravdě řečeno poprvé, snad to nebude tak těžké. |
||
Medvídek Profil |
#4 · Zasláno: 3. 2. 2015, 20:52:01
Fastman:
Mohlo by to vypadat asi následovně: SELECT US.user, US.body FROM users US LEFT JOIN upload UP ON US.user = UP.author2 GROUP BY author2 |
||
Fastman Profil |
Tak jsem to zapsal nějak takto
$dotazuser="SELECT US.user, US.body FROM users US LEFT JOIN upload UP ON US.user = UP.author2 GROUP BY author2"; //vytvoření sql dotazu $vysledekuser = MySQL_Query($dotazuser); // provedení sql dotazu echo "$vysledekuser"; //Zkoušel jsem, jestli se tady něco vypíše, bohuže nic. Tak jsem to nakonec udělal takhle //Ověření bodů přes users $dotazuser="SELECT US.user, US.body FROM users US LEFT JOIN upload UP ON US.user = UP.author2 GROUP BY author2"; //vytvoření sql dotazu $vysledekuser = MySQL_Query($dotazuser); // provedení sql dotazu while ($zaznam55 = MySQL_Fetch_Array($vysledekuser)){ $user55=$zaznam55["user"]; $body55=$zaznam55["body"]; } Tohle už funguje, ale co když chci vypsat záznam podle jména a body získat z tabulky "users" ? |
||
Taps Profil |
#6 · Zasláno: 4. 2. 2015, 07:21:02
Fastman:
<? $dotazuser="SELECT US.user,US.jmeno AS jmeno, US.body FROM users US LEFT JOIN upload UP ON US.user = UP.author2 GROUP BY author2"; ?> |
||
Fastman Profil |
Já jsem dám "celý kód", protože vážně už nevím.
$dotaz="SELECT * FROM maps ORDER BY id DESC"; //vytvoření sql dotazu $vysledek = MySQL_Query($dotaz); // provedení sql dotazu //provede dotazy v tabulce maps (původně upload) while ($zaznam = MySQL_Fetch_Array($vysledek)){ $id=$zaznam["id"]; $namemap=$zaznam["namemap"]; $author=$zaznam["author"]; $author2=$zaznam["author2"]; $filename=$zaznam["filename"]; $time=$zaznam["time"]; $body=$zaznam["body"]; $mapsize=$zaznam["mapsize"]; $teams2_a=$zaznam["teams1"]; $teams2_b=$zaznam["teams2"]; $min = 6; $max = 29; $min2 = 30; $max2 = 5000; //Vypíše tabulky users - tady jsem něco zkoušel, že by to vypsalo jenom uživatele pomocí proměnné $author2. To ale vypíše několik záznamů. $dotaz55="SELECT * FROM `users` WHERE `user` = $author2"; $vysledek55 = MySQL_Query($dotaz55); while ($zaznam55 = MySQL_Fetch_Array($vysledek55)){ $user55=$zaznam55["user"]; $body55=$zaznam55["body"]; } if($body<5){ print "<div id=\"main\"><div class=\"div3\"><div style='background:#315584; color:white; padding-left:10px'><b><a href=\"./index.php?id=$id\">$id</a></b><br><small> [ ".$time." ]</small></div></div></div>"; print "<div style='background:#B5C7DE; padding-left:10px;'>Map Name: ".$namemap."</div>"; print "<div style='background:#B5C7DE; padding-left:10px;'>Map Size: ".$mapsize."</div>"; print "<div style='background:#B5C7DE; padding-left:10px;'>Teams: ".$teams2_a." vs ".$teams2_b."</div>"; print "<div style='background:#B5C7DE; padding-left:10px;'>Author (Copyright): ".$author."".$author2."</div>"; print "<div id=\"main\"><div class=\"div2\"><div style='background:#B5C7DE; padding-left:10px;'>Download: <a href=\"./uploads/$filename\">$filename</a></div></div></div>"; } if($body >= $min && $body <= $max){.... Jinak $author je pro neregistrované a $author2 je pro registrované. Funguje to tak, že to vypíše všechny záznamy. Potřebuji, aby to podle $body (to je právě v druhé tabulce, kde jsou uživatelé) vypsalo a porovnalo. Má $author2 ($author2 je v tabulce "maps") v druhé tabulce "users" dostatek počet bodů, aby to vypsalo tu danou sekci? Podotknu, že jsem tabulku "upload" přepsal na "maps". Podmínky jsem udělal podle bodů. Pokud bude mít třeba 6 až 29 bodů - vypsáno if($body >= $min && $body <= $max) tak to vypíše.
|
||
Keeehi Profil |
#8 · Zasláno: 4. 2. 2015, 12:22:18
1) proměnná $user55 je trochu zbytečná, když v ní vždycky bude $author2
2) ukládat něco do $body55 je taky trochu zbytečné, když s tou proměnnou už nikde dál nepracuješ 3) ale hlavní problém je, že si to přepisuješ v tom vnořeném cyklu pod rukama, pokud chceš spočítat sumu, tak místo = bys měl použít +=, a nebo to nechat rovnou spočítat databázi 4) + prosím formátuj kód, toto se velmi špatně čte. |
||
Fastman Profil |
Keeehi:
Nevím jak to udělat. Stále nad tím přemýšlím. V tabulce "maps" jsou hodnoty "author2" a "author". A v tabulce "users" jsou registrovaní uživatelé, kde je "user" "password" "body". A já právě potřebuji, aby si to vybralo každého uživatele z author2 a vyhledalo v "users" a vybralo to body a dalo to do podmínky, jestli má dané body, aby se to zobrazilo. Otázkou je, jestli se to dá udělat pro každého uživatele, jako to mám zde: $dotaz="SELECT * FROM maps ORDER BY id DESC"; //vytvoření sql dotazu $vysledek = MySQL_Query($dotaz); // provedení sql dotazu //provede dotazy v tabulce maps (původně upload) while ($zaznam = MySQL_Fetch_Array($vysledek)){ ... To vypíše každého uživatele a zařadí si to do: print "<div id=\"main\"><div class=\"div3\"><div style='background:#315584; color:white; padding-left:10px'><b><a href=\"./index.php?id=$id\">$id</a></b><br><small> [ ".$time." ]</small></div></div></div>"; print "<div style='background:#B5C7DE; padding-left:10px;'>Map Name: ".$namemap."</div>"; print "<div style='background:#B5C7DE; padding-left:10px;'>Map Size: ".$mapsize."</div>"; print "<div style='background:#B5C7DE; padding-left:10px;'>Teams: ".$teams2_a." vs ".$teams2_b."</div>"; print "<div style='background:#B5C7DE; padding-left:10px;'>Author (Copyright): ".$author."".$author2."</div>"; print "<div id=\"main\"><div class=\"div2\"><div style='background:#B5C7DE; padding-left:10px;'>Download: <a href=\"./uploads/$filename\">$filename</a></div></div></div>"; |
||
Keeehi Profil |
#10 · Zasláno: 4. 2. 2015, 12:56:43
Fastman:
A češtin ty trocha umět? |
||
Fastman Profil |
#11 · Zasláno: 4. 2. 2015, 14:51:50
Keeehi:
„A češtin ty trocha umět?“ Co prosím? |
||
lionel messi Profil |
#12 · Zasláno: 4. 2. 2015, 14:58:25
Fastman:
„Co prosím?“ V prvom rade na chvíľu odlož bokom PHP výpis a sústreď sa na SQL. Ešte raz prosím popíš štruktúru predmetných tabuliek (aké sú v nich stĺpce) a čo potrebuješ dosiahnuť, začínam sa v tomto vlákne strácať. |
||
Fastman Profil |
#13 · Zasláno: 4. 2. 2015, 15:30:07
lionel messi:
Dobrá tedy, dal jsem si tu práci, abych to názorně ukázal na obrázku. http://fastmancz.sweb.cz/jakpsatweb/jakpsatweb_mysql_vysvetleni.jpg 1 - Stav, kdy se nic neděje. 2 - Tabulka maps, kde vybere uživatele z author2 3 - Podívá se do users a vyhledá user a vezme si jako údaj body. 4 - Finální podoba. Text je pouze upravený. |
||
Časová prodleva: 10 let
|
0