PDA

View Full Version : MySQL - kako izvesti query


franzi
28-02-2007, 18:34
Pozdrav.

Evo pokušavam jedan query napisati, pa bih molio malu pomoć.

Dakle, imam dvije tabele:
grupe [ id | naziv ]
korisnici_grupe [ id | grupa_id | korisnik_id ]

Sistem je tako napravljen zbog toga što sam želio da svaki korisnik može biti pridružen više grupa. Sad, što meni treba? Dakle, rezultat mora sadržavati sve grupe, i pod stupac korisnik_id mora dati id korisnika ako je pridružen toj grupi. Sve to gledam samo za jednog korisnika.

grupe
id | naziv
1 | Administrator
2 | Moderator
3 | Zujo

korisnici_grupe
id | grupa_id | korisnik_id
1 | 1 | 3
2 | 1 | 5
3 | 2 | 8
4 | 3 | 3

E sada, ja sam fokusiran na korisnika 3. Trebam ispisati sve grupe i u stupcu korisnik_id staviti 3 ili NULL.

rezultat
grupe.id | grupe.naziv | korisnici_grupe.korisnik_id
1 | Administrator | 3
2 | Moderator | NULL
3 | Zujo | 3

Nadam se da ste razumjeli sve ovo.

E sada, ja sam pokušavao to nekakvim joinevima izvesti, ali ništa nije davalo zadovoljavajući rezultat. Primjerice:
SELECT grupe.id, grupe.naziv, korisnici_grupe.korisnik_id FROM grupe LEFT JOIN korisnici_grupe ON (grupe.id=korisnici_grupe.grupa_id)

To ne valja jer uzme u obzir sve korisnike, a kad dodam WHERE korisnik_id = 3 onda ne izbaci red pod brojem dva (Moderator) jer je tamo pod korisnik_id = NULL.

P.S.: proučavao sam i mysqlov manual o JOINovima. Mogu reći samo jedno: užas.

gog
28-02-2007, 20:17
Pa naravno da ti ne ispiše Moderator, zašto bi ti i ispisalo, razmisli malo, to ti niti ne treba...

franzi
28-02-2007, 20:47
Ma ja hoću da mi ispiše moderator, jer radim jedan panel na kojem se pojedini korisnik može pridruživati i izbacivati iz pojedine grupe putem checkboxova.

Možda sam pogriješio princip?

tsereg
28-02-2007, 23:37
Upit koji tražiš izgleda kako je navedeno, ali vidi hoće li MySQL to razumjeti. Trebao bi.

SELECT
grupe.id
, grupe.naziv
, T.korisnik_id
FROM
grupe
LEFT JOIN
(
SELECT
*
FROM
korisnici_grupe
WHERE
korisnik_id = 3
) T
ON
grupe.id = T.grupa_id
;

franzi
01-03-2007, 13:51
Hvala tsereže, to je to.