Để nhận được tất cả các bài đăng của một người dùng nhất định (id =145) và tất cả những người dùng mà nó theo dõi các bài đăng, cùng với thông tin chi tiết về người dùng cho mỗi bài đăng, tôi sẽ viết lại truy vấn để sử dụng union
thay vì hoặc, do đó đơn giản hóa logic. Lựa chọn đầu tiên nhận bài đăng của người dùng nhất định, lựa chọn thứ hai nhận bài đăng của những người dùng mà nó đang theo dõi:
(SELECT P.id as postid,
P.caption,
P.date,
U.id as userid,
U.fullname,
U.username,
FROM USERS AS U
INNER JOIN Posts AS P ON P.userid = U.id
WHERE U.id = 145)
UNION
(SELECT P.id,
P.caption,
P.date,
U.id,
U.fullname,
U.username,
FROM Activity AS A
INNER JOIN USERS AS U ON A.IdOtherUser=U.id
INNER JOIN Posts AS P ON P.userid = U.id
WHERE A.id = 145)
ORDER BY postid DESC
Giả định:
-
Trường Activity.id đại diện cho người dùng, người theo dõi người dùng khác. Nếu không, bạn cần thay đổi tên trường thành tên thích hợp.
-
Đã phát minh ra trường userid của bảng Bài đăng đại diện cho người dùng đã đăng bài đăng. Vui lòng sử dụng tên trường chính xác ở vị trí của nó.