Autor | Zpráva | ||
---|---|---|---|
V4sek Profil * |
#1 · Zasláno: 15. 3. 2014, 18:39:14
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 |
#2 · Zasláno: 15. 3. 2014, 18:48:28
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"]."%'" $_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 * |
#5 · Zasláno: 15. 3. 2014, 18:55:38 · Upravil/a: V4sek
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 |
#6 · Zasláno: 15. 3. 2014, 19:16:48
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 * |
#7 · Zasláno: 15. 3. 2014, 19:23:21 · Upravil/a: V4sek
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 |
#8 · Zasláno: 15. 3. 2014, 19:39:31
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 * |
#9 · Zasláno: 15. 3. 2014, 19:49:22
no upřímně mám v tom hokej...
strukturu databáze jsem napsal o příspěvek výše |
||
Bertram Profil |
#10 · Zasláno: 15. 3. 2014, 19:54:47
V4sek:
lépe zhruba takto: skupiny id | nazev users id | jmeno skupiny_users id_skupiny | id_users |
||
V4sek Profil * |
#11 · Zasláno: 15. 3. 2014, 23:53:28
ano mám nicméně jak udělat příkaz, aby fungoval jak potřebuji?
|
||
Bertram Profil |
#12 · Zasláno: 16. 3. 2014, 00:14:31
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 |
||
Časová prodleva: 10 let
|
0