Mam takie zapytanie SQL:
Kod
SELECT t.id,
t.forum_id,
t.name AS topic_title,
t.displays AS displays_count,
t.replies AS replies_count,
t.author_id AS topic_author_id,
t.author_name AS topic_author_name2,
t.last_post AS last_post_id,
p.id,
p.author_id AS last_post_author_id,
p.author_name AS last_post_author_name2,
p.timestamp AS last_post_timestamp,
u.id,
u.login AS last_post_author_name,
u2.id,
u2.login AS topic_author_name
FROM `topic`
AS t,
`post` AS p,
`user` AS u,
`user` AS u2
WHERE ( t.forum_id = 1 AND p.id = t.last_post ) AND # i tutaj zaczynają się schody gdyż:
# jeśli p.author_id <> 0 wtedy musi być spełniony ten warunek u.id = p.author_id
# a jeśli p.author_id = 0 whtedy ten p.author_name <> ""
AND
# jeśli t.author_id <> 0 wtedy musi być spełniony ten warunek u2.id = t.author_id
# a jeśli t.author_id = 0 wtedy musi być spełniony ten warunek t.author_name <> ""
ORDER BY p.timestamp ASC;
t.forum_id,
t.name AS topic_title,
t.displays AS displays_count,
t.replies AS replies_count,
t.author_id AS topic_author_id,
t.author_name AS topic_author_name2,
t.last_post AS last_post_id,
p.id,
p.author_id AS last_post_author_id,
p.author_name AS last_post_author_name2,
p.timestamp AS last_post_timestamp,
u.id,
u.login AS last_post_author_name,
u2.id,
u2.login AS topic_author_name
FROM `topic`
AS t,
`post` AS p,
`user` AS u,
`user` AS u2
WHERE ( t.forum_id = 1 AND p.id = t.last_post ) AND # i tutaj zaczynają się schody gdyż:
# jeśli p.author_id <> 0 wtedy musi być spełniony ten warunek u.id = p.author_id
# a jeśli p.author_id = 0 whtedy ten p.author_name <> ""
AND
# jeśli t.author_id <> 0 wtedy musi być spełniony ten warunek u2.id = t.author_id
# a jeśli t.author_id = 0 wtedy musi być spełniony ten warunek t.author_name <> ""
ORDER BY p.timestamp ASC;
W miescu komentarzy nie wiem jak sformułować ten warunek, by jeśli p.autor_id jest różne od zera to wtedy ma być dodane do klauzuli WHERE to: warunek u.id = p.author_id a jeśli nie jest różne to ma być dodane to: p.author_name <> "". I analogicznie z drugą częścią po AND
Może macie jakieś pomysły??