[英]Select left join
我的PHP會話:
$get_user = $_SESSION['id']; //id of the user that logged in
我的查詢是:
$query_select = "SELECT i.users_id,s.seen, CONCAT_WS(' ', i.users_fname, i.users_lname)
AS full_name
FROM tbl_request AS f
LEFT JOIN tbl_usersinfo AS i ON i.users_id = f.user_id
LEFT JOIN tbl_status AS s ON s.user_id = f.user_id
WHERE (f.user_id = $get_user || f.another_user = $get_user) && f.status = 'accepted'
GROUP BY full_name ORDER BY seen DESC
tbl_request:
user_id another_user status
1 2 'accepted'
1 5 'accepted'
3 1 'waiting'
4 1 'accepted'
tbl_usersinfo
users_id users_fname users_lname
1 michael jackson
2 michael jordan
3 bat man
4 will smith
5 sean kingston
tbl_status
user_id seen
1 'online'
2 'offline'
3 'online'
4 'online'
5 'offline'
讓我們假設會話等於1,該查詢將導致:
users_id full_name seen
4 will smith online
它應該是:
users_id full_name seen
2 michael jordan offline
4 will smith online
5 sean kingston offline
我想選擇所有等於“已接受”的狀態,但是上面的查詢僅在會話等於another_user時顯示。 我希望查詢靈活。 例如,當會話等於user_id時,它應該選擇another_user,因為那是他朋友的ID。
問題是,在您的LEFT JOIN
您總是將其與f.user_id
進行比較,但僅當您的$get_user
在another_user
列中時,它才應為f.user_id
...並且在其他方面也相同...我建議您要重新完成您的查詢...
有很多方法可以做到這一點,但是使用UNION
可能會更簡單:
SELECT i.users_id,s.seen, CONCAT_WS(' ', i.users_fname, i.users_lname)
AS full_name
FROM tbl_request AS f
LEFT JOIN tbl_usersinfo AS i ON i.users_id = f.another_user
LEFT JOIN tbl_status AS s ON s.user_id = f.another_user
WHERE f.user_id = $get_user && f.status = 'accepted'
UNION
SELECT i.users_id,s.seen, CONCAT_WS(' ', i.users_fname, i.users_lname)
AS full_name
FROM tbl_request AS f
LEFT JOIN tbl_usersinfo AS i ON i.users_id = f.user_id
LEFT JOIN tbl_status AS s ON s.user_id = f.user_id
WHERE f.another_user = $get_user && f.status = 'accepted'
GROUP BY full_name ORDER BY seen DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.