Portál AbcLinuxu, 3. listopadu 2025 15:51
skupina1: user1 skupina2: user1, user2 skupina3: user1 potom budou data selectu z pohledu vypadat takto: user1 skupina1 user1 skupina2 user1 skupina3 user2 skupina2
SELECT uzivatel.* FROM uzivatel, uzivatel_skupina WHERE uzivatel.id = uzivatel_skupina.uzivatel_id AND uzivatel_skupina.skupina_id = ?Případně si z toho můžete udělat pohled a tu druhou podmínku z
WHERE používat až nad tím pohledem.
JOIN, protože při spojení tří a více tabulek nějak nikde nevidím levou a pravou tabulku
Relační databáze je podle mne relační právě proto, že jsou v ní vyjádřené vztahy (relace) mezi entitami. K jejich získávání je pak samozřejmě potřeba spojení tabulek (JOIN). Pokud nějaká databáze neimplementuje JOIN, může to být objektová databáze, síťová, mapa, ale ne relační databáze.
CREATE DATABASE omg;
CREATE TABLE wtf (id INT NOT NULL); --na pk kašlu, pro teď to není důležitý
tim se vytvoří databáze s právě jednou relací (tabulkou)
ta databáze je relační, protože obsahuje relaci (tabulku)
CREATE VIEW lol AS SELECT id FROM wtf
stále máme relační databázi, která teď obsahuje právě dvě relace (jednu tabulku a jeden pohled)
jestli to není jasný ani teď, tak mi nezbejvá než odkázat na http://en.wikipedia.org/wiki/Relational_database
SELECT
u.id,
u.username
FROM users u
INNER JOIN user2group u2g ON u2g.user = u.id
WHERE u2g.group = <dana_skupina>
Jinak pokud jsou uzivatelska jmena unikatni, nemohou byt rovnou pouzita jako primarni klic?
Pak by totiz stacilo:
SELECT username FROM user2group WHERE group = <dana_skupina>
SELECT DISTINCT uzivatel.* FROM uzivatel, uzivatel_skupina WHERE uzivatel.id = uzivatel_skupina.uzivatel_id AND uzivatel_skupina.skupina_id IN (?)
Pokud nezadám "where group=" tak by se měli zobrazit všichi uživatelé, ale jen jednouKdyz bude uzivatel ve dvou skupinach, ma se tedy ve sloupci se skupinou zobrazit jen jedna z nich? Ktera? Nebude jednodussi v takovem pripade selectit primo s tabulky s uzivateli, kdyz vas skupiny v takovem pripade nezajimaji?
SELECT
id
FROM users
WHERE id IN (
SELECT user
FROM user2group
WHERE group = ?
);
Tzn. tu podminku where group= nahradit touto a chova se to presne jak potrebujete ;]
select uid from view_u2g where gid='...'Tak dostanete uživatele v dané skupině. Uživatele v ruzných skupinách pak třeba přes operátor "in" s použitím "distinct"
select distinct uid from view_u2g where gid in('gid1','gid2',...)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.