Ano, OR
je často zabijákem výkonu. Běžným řešením je udělat UNION
. Pro váš příklad:
SELECT *
FROM `posts`
LEFT JOIN `teams_users`
ON (teams_users.team_id=posts.team_id
AND teams_users.user_id='7135')
WHERE (teams_users.status='1')
UNION DISTINCT
SELECT *
FROM `posts`
LEFT JOIN `teams_users`
ON (teams_users.team_id=posts.team_id
AND teams_users.user_id='7135')
WHERE (posts.user_id='7135');
Pokud jste si jisti, že nedochází k dupsům, přejděte na rychlejší UNION ALL
.
Pokud nelovíte chybějící team_users
řádků, použijte JOIN
místo LEFT JOIN
.
Pokud potřebujete ORDER BY
, přidejte nějaké závorky:
( SELECT ... )
UNION ...
( SELECT ... )
ORDER BY ...
V opačném případě ORDER BY
by se vztahovalo pouze na druhý SELECT
. (Pokud potřebujete také 'stránkování', podívejte se na můj blog
.)
Upozorňujeme, že možná budete potřebovat také LIMIT
za určitých okolností.