簡體   English   中英

選擇左聯接

[英]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_useranother_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM