Oui, OR
est souvent un tueur de performance. Une solution de contournement courante consiste à faire UNION
. Pour votre exemple :
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');
Si vous êtes sûr qu'il n'y a pas de doublons, passez au plus rapide UNION ALL
.
Si vous ne cherchez pas les team_users
manquants lignes, utilisez JOIN
au lieu de LEFT JOIN
.
Si vous avez besoin de ORDER BY
, ajoutez des parenthèses :
( SELECT ... )
UNION ...
( SELECT ... )
ORDER BY ...
Sinon, le ORDER BY
ne s'appliquerait qu'au deuxième SELECT
. (Si vous avez également besoin de 'pagination', consultez mon blog
.)
Veuillez noter que vous pourriez également avoir besoin de LIMIT
dans certaines circonstances.