Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Izlistaj sve korisnike sa statusom (aktivan/neaktivan) iz m:n relacije

[es] :: MySQL :: Izlistaj sve korisnike sa statusom (aktivan/neaktivan) iz m:n relacije

[ Pregleda: 2071 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

loonies
~

Član broj: 40927
Poruke: 248



+12 Profil

icon Izlistaj sve korisnike sa statusom (aktivan/neaktivan) iz m:n relacije07.06.2010. u 11:27 - pre 168 meseci
Imam 3 tabele:
Code:

users(id, username)
roles(id, name)
roles_users(user_id, role_id)


Code:

mysql> select id, username from users;
+----+----------+
| id | username |
+----+----------+
|  1 | admin    |
|  9 | nema     |
|  2 | tester   |
|  6 | tester1  |
|  7 | tester2  |
|  8 | tester3  |
+----+----------+


Code:

mysql> select id, name from roles;
+----+-------+
| id | name  |
+----+-------+
|  2 | admin |
|  1 | login |
+----+-------+


Code:

mysql> select user_id, role_id from roles_users;
+---------+---------+
| user_id | role_id |
+---------+---------+
|       1 |       1 |
|       7 |       1 |
|       8 |       1 |
|       1 |       2 |
|       2 |       2 |
+---------+---------+


Kako da izlistam korisnike sa statusom, tj da li imaju login role ili ne (login role oznacava da li je korisnik aktivan ili ne)? Dakle treba mi izlaz nesto kao:

Code:

+----+----------+-------+
| id | username | active|
+----+----------+-------+
|  1 | admin    | TRUE  |
|  9 | nema     | FALSE |
|  2 | tester   | FALSE |
|  6 | tester1  | FALSE |
|  7 | tester2  | TRUE  |
|  8 | tester3  | TRUE  |
+----+----------+-------+


Ja sam JOIN-ovao tabele, ali nikako da ubacim status, tj ili imam duplikate ili ako filtriram, onda mi nedostaju korisnici bez login role-a.

And all you touch and all you see
Is all your life will ever be
---Δ==

Neugodna istina - reaguj! | Linux is not Windows
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: Izlistaj sve korisnike sa statusom (aktivan/neaktivan) iz m:n relacije07.06.2010. u 11:32 - pre 168 meseci
ja sam malo usporen danas - ne kapiram sta pitas?

naveo si username, name i role a trazis status?
 
Odgovor na temu

Tyler Durden
Tyler Durden
Beograd

Član broj: 4312
Poruke: 3379
*.verat.net.



+1365 Profil

icon Re: Izlistaj sve korisnike sa statusom (aktivan/neaktivan) iz m:n relacije07.06.2010. u 11:44 - pre 168 meseci
Koliko sam ja skontao ti zelis u slucaju da neko ima role "login" za njegov status ispise false, odnosno nije aktivan.
E sad, to moze samo sa nekim if-om, ako se ne varam.
Ali, nije to problem. Problem je sto mi se ovo cini ne bas najsrecniji dizajn baze..
Beneath civilization's fragile crust, cold chaos churns...
 
Odgovor na temu

loonies
~

Član broj: 40927
Poruke: 248



+12 Profil

icon Re: Izlistaj sve korisnike sa statusom (aktivan/neaktivan) iz m:n relacije07.06.2010. u 12:24 - pre 168 meseci
Citat:
Koliko sam ja skontao ti zelis u slucaju da neko ima role "login" za njegov status ispise false, odnosno nije aktivan.


Da!

Dizajn baze je OK, user moze imati vise role-a i role moze biti dodeljen vise user-ima.

Zaboravite onaj izlaz gde je prikazana kolona 'active'. Treba mi ovakav izlaz (da bi bilo jasnije):

Code:

+----+----------+-------+
| id | username | name  | (users.id | users.username | roles.name)
+----+----------+-------+
|  1 | admin    | login |
|  9 | nema     | NULL  | (ovaj user nema "prikacen" login role, tj nema referencu preko 'roles_users' pivot tabele)
|  2 | tester   | NULL  | (ovaj user nema "prikacen" login role, ....)
|  6 | tester1  | NULL  | (ovaj user nema "prikacen" login role, ...)
|  7 | tester2  | login |
|  8 | tester3  | login |
+----+----------+-------+


Npr. u ovim primerima, user admin ima 2 role-a: login i admin, ali mene samo interesuje da li ima ili nema login role.


And all you touch and all you see
Is all your life will ever be
---Δ==

Neugodna istina - reaguj! | Linux is not Windows
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Izlistaj sve korisnike sa statusom (aktivan/neaktivan) iz m:n relacije07.06.2010. u 12:52 - pre 168 meseci
Treba ti outer join. Ne znam tačno sintaksu na MySql, ali ovo je po ANSI, pa bi trebalo da prođe (testirano na Oracle)

Code (sql):

CREATE TABLE test_users (id NUMBER, username varchar2(20));
CREATE TABLE test_roles (id NUMBER, name varchar2(20));
CREATE TABLE test_roles_users (user_id NUMBER, role_id NUMBER);

INSERT INTO test_users VALUES (1, 'admin');
INSERT INTO test_users VALUES (9, 'nema');
INSERT INTO test_users VALUES (2, 'tester');
INSERT INTO test_users VALUES (6, 'tester1');
INSERT INTO test_users VALUES (7, 'tester2');
INSERT INTO test_users VALUES (8, 'tester3');

INSERT INTO test_roles VALUES (1, 'login');
INSERT INTO test_roles VALUES (2, 'admin');

INSERT INTO test_roles_users VALUES (1, 1);
INSERT INTO test_roles_users VALUES (7, 1);
INSERT INTO test_roles_users VALUES (8, 1);
INSERT INTO test_roles_users VALUES (1, 2);
INSERT INTO test_roles_users VALUES (2, 2);

SELECT u.id, u.username, rx.name
FROM test_users u LEFT OUTER JOIN (
   SELECT ru.user_id, r.name
   FROM test_roles_users ru, test_roles r
   WHERE r.id = 1
   AND ru.role_id = r.id) rx
ON u.id=rx.user_id;

DROP TABLE test_users;
DROP TABLE test_roles;
DROP TABLE test_roles_users;
 


Rezultat:
Code:

       ID    USERNAME    NAME
1    1    admin    login
2    7    tester2    login
3    8    tester3    login
4    6    tester1    
5    2    tester    
6    9    nema    

 
Odgovor na temu

loonies
~

Član broj: 40927
Poruke: 248



+12 Profil

icon Re: Izlistaj sve korisnike sa statusom (aktivan/neaktivan) iz m:n relacije07.06.2010. u 13:10 - pre 168 meseci
Pazi kakav prefrigan query...

OUTER JOIN mi ne bi pao na pamet, a takodje nisam znao da kao table reference za JOIN moze da se stavi izlaz SELECT izraza, mislio sam da ide iskljucivo ime tabele.

Hvala!
And all you touch and all you see
Is all your life will ever be
---Δ==

Neugodna istina - reaguj! | Linux is not Windows
 
Odgovor na temu

Shinhan
PHP programmer
Subotica

Član broj: 12327
Poruke: 372
*.static.isp.telekom.rs.

Jabber: shinhan@elitesecurity.org
ICQ: 400847988


+4 Profil

icon Re: Izlistaj sve korisnike sa statusom (aktivan/neaktivan) iz m:n relacije08.06.2010. u 07:41 - pre 168 meseci
Evo mog predloga:

Code:

SELECT u.username, ru.role_id IS NULL
FROM users AS u
 LEFT JOIN roles_users AS ru ON u.id = ru.user_id AND ru.role_id = 1

"Common sense is not so common." - Voltaire
 
Odgovor na temu

[es] :: MySQL :: Izlistaj sve korisnike sa statusom (aktivan/neaktivan) iz m:n relacije

[ Pregleda: 2071 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.