Pobranie danych z trzech tabel

Jerzy Biernacki
05.09.2015

Próbuję zoptymalizować kilka zapytań i mam problem ze skryptem newsów - który ma być podpisany nickiem autora, w kolorze odpowiadającym jego randze i być odsyłaczem do profilu usera.

otrzebuję pobrać:
- z tabeli news: *;
- z tabeli `user`: `id`, `name`, `group`;
- z tabeli `group`: `color`;
dodatkowo:
- ORDER BY `news`.`id` DESC;
- LIMIT x,y;
albo:
- WHERE `news`.`id`=z.

Udało mi się napisać to korzystając z "podzapytań" ale nie wydaje mi się, by było to zbyt optymalne, a join'ów nie specjalnie używać potrafię.

Rozwiązanie:
 

z limitem:


SELECT news.*, user.id, user.name, user.group, group.color FROM news LEFT JOIN user ON news.creatorid = user.id LEFT JOIN group ON user.group = group.id ORDER BY news.id DESC LIMIT x,y

z where:

SELECT news.*, user.id, user.name, user.group, group.color FROM news LEFT JOIN user ON news.creatorid = user.id LEFT JOIN group ON user.group = group.id WHERE news.id=z  

Zakładam że w tabeli news jest pole creatorid które określa id usera który tworzył dany news.
Użyłam tu LEFT JOINa, który nawet jak nie dostanie nic z tabel user czy group to i tak zwróci wynik z news, jak chcesz wymagać by było wszystko to pozmieniaj LEFTy na same JOINy.

Zmień creatorid na news_author.
Ja bym to wrzuciła do news name, id i color usera... Chyba że te rzeczy mogą być poddane modyfikacji.

Zgłoś swój pomysł na artykuł

Więcej w tym dziale Zobacz wszystkie