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.