Autor Zpráva
V4sek
Profil *
Zdravím, mám dvě tabulky v databázi.

<?php
if (isset($_GET["id"])){

 $sql = MySQL_Query("SELECT * FROM skupiny WHERE id = '".$_GET["id"]."'");
 while ($row = MySQL_Fetch_Array($sql)) {     

 $sql2 = MySQL_Query("SELECT * FROM users WHERE skupiny = '".$_GET["id"]."'");
 while ($row_screen = MySQL_Fetch_Array($sql2)) {

echo"<h1>".$row["nazev"]."</h1>";
echo"".$row2["jmeno"]."";

} 
}
}   
?>

v ".$_GET["id"]." = mám id např 1 nebo 2 nebo 3
v tabulce users ve sloupci skupiny zapisuju polem, teky když uživatel má všechny skupiny(1,2,3) tak zápis ve sloupci je 1,2,3

moje otázka zní, jak udělám, když chci vypsat jen jednu skupinu např skupinu s id 2 (adresa: www.mujweb.cz/skupina/2 --- 2=".$_GET["id"].")

když bych v tabulce users a sloupci skupiny měl pouze jedno číslo tak to není problém, ale jak mám udělat, když se shoduje jedno číslo aby se to vypsalo?
Zechy
Profil
SELECT * FROM users u JOIN skupiny s ON(s.id = u.skupiny)  WHERE s.id = 2;

Vybere ti to uživatele i všechny údaje ke skupině, plus where zajistí, že budeš mít jen skupinu s ID dva.
Alphard
Profil
Tady chybí třetí tabulka, která bude obsahovat v páru id_skupiny a id_uživatele. Pak tam bude právě jedno číslo a nebude to problém :-)
Navíc ten while je šíleně neefektivní, koukněte se na spojování tabulek pomocí join.
Viz www.linuxsoft.cz/article.php?id_article=854.

Zechy [#2]:
Imho nedostatečné.

Fisir [#4]:
Tohle je lepší neradit. Ať si opraví strukturu včas.
Fisir
Profil
Reaguji na V4ska:
Zaprvé, používej escapování. Zadruhé, příště použij rozšíření MySQLi.

Lze to provést s pomocí konstrukce LIKE:
"SELECT * FROM users WHERE skupiny LIKE '%".(int)$_GET["id"]."%'"
Takhle to je ale značně nedokonalé, pokud budeš mít ve skupině hodnotu 1 a v $_GET["id"] třeba 12, vrátí ti to i tohohle uživatele. Evidentně je to špatný návrh databáze, nebo to můžeš zkusit rozdělit zpět do pole (až v PHP) a přidat podmínku, zda to pole opravdu obsahuje požadovanou hodnotu.
V4sek
Profil *
Zechy:
bohužel, takhle to vypíše pouze jednoho uživatele


vytvořil jsem si třetí tabulky, nicméně mám problém se spojováním tabulek

 $sql2 = MySQL_Query("select skupiny.id, users.id from
skupiny join skupiny_vysledky on skupiny.id = skupiny_vysledky.id_uzivatele
join users on skupiny_vysledky.id = users.id
where skupiny.id = '2'");
Tori
Profil
Nemáte přehozené názvy sloupců?
join skupiny_vysledky on skupiny.id = skupiny_vysledky.id
join users on skupiny_vysledky.id_uzivatele = users.id
V4sek
Profil *
ikdyž jsem změnil tak nezobrazuje nic


mám tedy 3 tabulky

users sloupce id, login, jmeno ....
skupiny sloupce id, nazev
skupiny_vysledky sloupce id, id_skupiny, id_uzivatele

můžete prosím poradit?

ještě jsme to zkoušel

$sql2 = MySQL_Query("select skupiny.id, users.id from
skupiny join skupiny_vysledky on skupiny.id = skupiny_vysledky.id_skupiny
join users on skupiny_vysledky.id_uzivatele = users.id
where skupiny.id = '".$_GET["id"]."'");

bohužel stejný výsledek (nic nezobrazuje)
Alphard
Profil
V4sek:
Do vaší databáze nevidíme, ale zřejmě již dodržujete aspoň první normální formy, takže je to na dobré cestě. Naučit se automaticky používat join, případně left join může trvat déle než čtvrt hodiny, prostě si s tím chvíli hrajte v nějakém adminu, kde snadno vidíte výsledky. Spojte třeba jenom 2 tabulky, vylaďte to a pak přidejte třetí. Nakonec se dotaz jen zkopíruje do PHP.
V4sek
Profil *
no upřímně mám v tom hokej...
strukturu databáze jsem napsal o příspěvek výše
Bertram
Profil
V4sek:
lépe zhruba takto:

skupiny
id | nazev

users
id | jmeno

skupiny_users
id_skupiny | id_users
V4sek
Profil *
ano mám nicméně jak udělat příkaz, aby fungoval jak potřebuji?
Bertram
Profil
SELECT skupiny.nazev, users.jmeno FROM skupiny 
LEFT JOIN skupiny_users on skupiny.id = skupiny_users.id_skupiny
LEFT JOIN users on users.id = skupiny_users.id_users 
ORDER BY skupiny.nazev

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: