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.