Autor | Zpráva | ||
---|---|---|---|
pema01 Profil |
#1 · Zasláno: 28. 12. 2015, 14:35:34
Ahoj,
již dlouho přemýšlím nad asi trochu složitějším SQL příkazem a ne a ne s tím hnout. Mám 3 tabulky (jejich strukturu vidíte na obrázku zde:). Potřebuji vypsat výsledek příkazu: Vypiš všechny řádky z tabulky TSubject (všechny předměty v tabulce), které nemají v tabulce TSchoolSubject přiřazenou hodnotu školy uloženou v proměnné v PHP (TSchool.ID). Zkrátka chci vypsat všechny předměty, které škola nemá přiřazené v zásobníku TSchoolSubject, jestli mi rozumíte. Jsem v mysql začátečník a s tímto si nějak nedokážu poradit. Díky |
||
midlan Profil |
Jestli chápu, hledáš předměty, které nejsou přiřazeny žádné škole. Potom taktko:
SELECT * FROM TSubject s WHERE s.ID NOT IN (SELECT ss.IDSubject FROM TSchoolSubject ss); Tento dotaz by to měl řešit za předpokladu, že máš správně zavedený cizí klíč na tu školu. BTW: potřebuješ v tabulce TSchoolSubject nutně to ID ? Zrušil bych ho a zavedl kompozitní primární klíč nad IDSubject a IDSchool . Případně jestli je ID potřeba, měl bys mít zavedený popsaným způsobem klíč unikátní.
|
||
pema01 Profil |
#3 · Zasláno: 28. 12. 2015, 17:51:38
midlan:
Ano, u všech tabulek je ID "Primary key" (na obr. jsem zapomněl znázornit). V databázi je více škol pod různým ID. Přihlášený konkrétní správce školy bude chtít přidat předmět, který je v databázi webu, avšak v jeho škole ještě není zadaný. Proto chci zobrazit všechny předměty, které do školy nepatří (tj. předmět, který škola s ID 1 nemá přiřazený v zásobníku). Děkuji za radu, zkusím si s tím nějak poradit ;) |
||
pema01 Profil |
#4 · Zasláno: 29. 12. 2015, 11:40:53
tak jsem se (marně) pokoušel o nějaký výsledek, ale opravdu jen marně... nejde mi to :-(
"SELECT * FROM `TSubject` WHERE `TSubject.ID` NOT IN " . "(SELECT `IDSubject` FROM `TSchoolSubject` WHERE `IDSchool`= '".$_SESSION["IDSchool"]."')" Tento kód nefunguje, ale nemyslím si, že by byl úplně špatně, co vy na to? |
||
juriad Profil |
#5 · Zasláno: 29. 12. 2015, 11:59:40
pema01:
Když neumíš použivat zpětné apostrofy ` , tak je nepoužívej. Jsou nutné jen tehdy, kdyby název tabulky nebo sloupce bylo klíčové slovo v MySQL.
V tvém případě dělá problém `TSubject.ID` - to jsi vynutil, že bude brát celé jako název sloupce, ale takový neexistuje. Správně by to bylo: `TSubject`.`ID` nebo prostě jen TSubject.ID .
Pokud ti něco nefunguje, vypiš si chybu pomoci mysql_error (nebo jiné funkce, podle toho, jakou knihovnu používáš). |
||
pema01 Profil |
juriad:
no, koukám, že ty apostrofy nějak zlobí. "SELECT * FROM TSubject WHERE TSubject.ID NOT IN " . "(SELECT IDSubject FROM TSchoolSubject WHERE IDSchool= '".$_SESSION["IDSchool"]."')" Bez apostrofů tedy kód už krásně funguje. Díky. |
||
mimochodec Profil |
#7 · Zasláno: 29. 12. 2015, 13:11:57
pema01:
„Bez apostrofů tedy kód už krásně funguje. Díky.“ Zruš ještě tyhle: WHERE IDSchool= '".$_SESSION["IDSchool"]."'
Tam, kde se pracuje s číslem, nemá apostrof co dělat. |
||
Časová prodleva: 8 let
|
0