| 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: 12 let
|
|||
0