Ja, OR
is vaak een prestatie-killer. Een veelvoorkomende oplossing is om UNION
. te doen . Voor jouw voorbeeld:
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');
Als je zeker weet dat er geen dups zijn, verander dan naar de snellere UNION ALL
.
Als je niet op zoek bent naar ontbrekende team_users
rijen, gebruik JOIN
in plaats van LEFT JOIN
.
Als u ORDER BY
nodig heeft , voeg enkele haakjes toe:
( SELECT ... )
UNION ...
( SELECT ... )
ORDER BY ...
Anders, de ORDER BY
zou alleen van toepassing zijn op de tweede SELECT
. (Als je ook 'paginering' nodig hebt, zie mijn blog
.)
Houd er rekening mee dat u mogelijk ook LIMIT
. nodig heeft in bepaalde omstandigheden.