2013-01-17 74 views
0

我正在嘗試返回用戶列表及其上次登錄日期。我需要得到一些不會影響我的外部順序的聲明,因爲它通過用戶選擇排序列表的參數動態填充它。另一件事是存儲登錄時間的表需要2個字段鏈接到用戶表user_id和user_type。mysql group and sort without order by out out most

table_admin 
field: id, name 

table_logs 
field: id, user_id, user_type, login_date 

* table_admin.id = table_logs.user_id

table_logs.user_type需要 「管理」 *

我需要拉從table_admin所有的管理員用戶與他們的最後一次登錄的日期(它如果日誌表中沒有記錄,也需要工作),日誌表中的user_type將是「admin」。

謝謝你的時間。

SELECT SQL_CALC_FOUND_ROWS admins.*,ld2.ip,ld2.login_date as last_login 
FROM admins 
LEFT JOIN ( 
    SELECT * FROM log_logins WHERE user_type = "admin" ORDER BY login_date DESC 
) as ld2 ON (ld2.user_id = admins.id) 
WHERE 1 
GROUP BY user_id 
ORDER BY admins.id DESC LIMIT 0,40 

這是我迄今爲止,但它不抓住結果,如果他們沒有在日誌表中的條目。

+0

請提供您的現有查詢的例子。 –

+0

「如果它們在日誌表中沒有條目,它就不會獲得結果」 - 是的,它確實!!! WHERE位實際上是一個變量嗎? – Strawberry

+0

您的權利確實如此,在測試期間它不是,但我認爲這是一個不同的問題,因爲我稍後嘗試再次測試,它工作得很好。 – Danny

回答

1

這是一個集合聯接:

select a.name, 'admin' as userType, max(l.login_date) as lastLoginDate 
from admin a left outer join 
    logs l 
    on a.id = l.id and 
     l.user_type = 'admin' 
group by a.name