Autor Zpráva
Fastman
Profil
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
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
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.
a vypsalo se Resource id #6 až #9.


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
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";
?>
Má se vypisovat součet bodů nebo jejich počet?
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
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
Fastman:
A češtin ty trocha umět?
Fastman
Profil
Keeehi:
A češtin ty trocha umět?

Co prosím?
lionel messi
Profil
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
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ý.

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: