2014-10-07 2 views
0

мой 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, он должен выбрать другой_зазор, потому что это идентификатор его друга.

+0

Можете ли вы привести пример вывода запроса? –

+0

просто удалите f.another_user = $ get_user –

+0

Он вернет пользователю id = '1', запрос должен выбрать another_user –

ответ

1

Проблема заключается в том, что в ваших LEFT JOIN с всегда сравнивают с f.user_id, но это должно быть f.user_id только если $get_user в another_user колонке ... а также то же самое по-другому ... Я предлагаю вам римейк завершить свой запрос ...

Есть много способов сделать это, но, возможно, проще будет использовать 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 
+1

WOOOOOOWW, спасибо siiiirr, что вы спасатель жизни :))) Я пытался выведите это за 2 часа. –

+0

Добро пожаловать :-) – Legionar

Смежные вопросы