Ja, OR
ist häufig ein Performance-Killer. Eine gängige Problemumgehung besteht darin, UNION
auszuführen . Für Ihr Beispiel:
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');
Wenn Sie sicher sind, dass es keine Dups gibt, wechseln Sie zum schnelleren UNION ALL
.
Wenn Sie nicht nach fehlenden team_users
fischen Zeilen verwenden Sie JOIN
statt LEFT JOIN
.
Wenn Sie ORDER BY
benötigen , fügen Sie einige Klammern hinzu:
( SELECT ... )
UNION ...
( SELECT ... )
ORDER BY ...
Ansonsten ORDER BY
würde nur für das zweite SELECT
gelten . (Wenn Sie auch „Paginierung“ benötigen, siehe mein Blog
.)
Bitte beachten Sie, dass Sie möglicherweise auch LIMIT
benötigen unter bestimmten Umständen.