NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: SQS dotaz s joinem přes vazební tabulku nebo tak něco

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Ondřej Pech
Člen
Avatar
Ondřej Pech:1.2.2018 11:00

Ahoj, potřeboval bych poradit s SQL dotazem. Mám 2 tabulky, v jedné jsou moduly redakčního systému:

id depandent icon name link active
1   fa fa-search-plus Vyhledávání zákazníků ecc/modul_ecc 1
2   fa fa-files-o Reporty # 1
3 2 fa fa-money Provize # 1
4 2 fa fa-chevron-circle-right 1click # 1
5 4 fa fa-chevron-circle-right Obchodní případ - Automat view/report_1c_OPA 1
6 4 fa fa-chevron-circle-right Reklamace view/report_1c_rek 1

A pak druhou v podstatě vazební tabulku kde je id uživatele a id modulu ke kterému má mít přístup:

id user_id module_id
1 54 2
2 54 4
3 23 2

(pochopitelně je ještě tabulka users ale ta není důležitá)

No a v SQL dotazu potřebuju vytáhnout jen ty data z z tabulky modulů kde je určité user ID, zkusil sem něco takového ale píše to syntax error:

SELECT isd_modules_access.id, isd_modules_access.icon, isd_modules_access.name, isd_modules_access.link, isd_modules_access.depandent
FROM isd_modules_access
WHERE isd_modules_access.active = 1
AND isd_modules_access.depandent IS NULL
RIGHT JOIN isd_permissions ON = isd_modules_access.id = isd_permissions.module_id

Díky za rady.

 
Odpovědět
1.2.2018 11:00
Avatar
Ondřej Pech
Člen
Avatar
Ondřej Pech:1.2.2018 11:17

Nakonec jsem to vyřešil takto, což si myslím, že je správně:

SELECT isd_modules_access.id, isd_modules_access.icon, isd_modules_access.name, isd_modules_access.link, isd_modules_access.depandent
            FROM isd_modules_access
            WHERE isd_modules_access.active = 1
            AND isd_modules_access.depandent IS NULL
            AND isd_modules_access.id IN (
                SELECT isd_permissions.module_id
                FROM isd_permissions
                WHERE isd_permissions.user_id = ?
                )
Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
1.2.2018 11:17
Avatar
dez1nd
Člen
Avatar
Odpovídá na Ondřej Pech
dez1nd:1.2.2018 11:55

Toto je asi špatnej zápis

RIGHT JOIN isd_permissions ON = isd_modules_access.id = isd_permissions.module_id

takto je to správně

RIGHT JOIN isd_permissions ON (isd_modules_access.id = isd_permissions.module_id)

jinak pro příště si můžeš skrátit zápis takto

SELECT m.id, m.icon, m.name, m.link, m.depandent
            FROM isd_modules_access m
            WHERE m.active = 1
            AND m.depandent IS NULL
            AND m.id IN (
                SELECT p.module_id
                FROM isd_permissions p
                WHERE p.user_id = ?
                )
 
Nahoru Odpovědět
1.2.2018 11:55
Avatar
Odpovídá na Ondřej Pech
Neaktivní uživatel:1.2.2018 12:00

JOINy btw. patří mezi FROM a WHERE a syntaxe je

JOIN isd_permissions ON isd_modules_access.id = isd_permissions.module_id
Editováno 1.2.2018 12:00
Nahoru Odpovědět
1.2.2018 12:00
Neaktivní uživatelský účet
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.