Có, OR thường là một kẻ giết người về hiệu suất. Công việc chung là thực hiện UNION . Ví dụ của bạn:
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');
Nếu bạn chắc chắn không có lỗi, hãy đổi sang UNION ALL nhanh hơn .
Nếu bạn không câu cá vì thiếu team_users hàng, sử dụng JOIN thay vì LEFT JOIN .
Nếu bạn cần ORDER BY , thêm một số parens:
( SELECT ... )
UNION ...
( SELECT ... )
ORDER BY ...
Nếu không, ORDER BY sẽ chỉ áp dụng cho SELECT thứ hai . (Nếu bạn cũng cần 'phân trang', hãy xem blog của tôi
.)
Xin lưu ý rằng bạn cũng có thể cần LIMIT trong những trường hợp nhất định.