2011-10-07 46 views
-1

//编辑:最新贷款为所有用户

所有的工作罚款:

SELECT u.*, 
    l.cod AS loans_cod, 
    l.step AS loans_step 
FROM users AS u 
LEFT JOIN loans AS l 
ON u.id = l.users_id 
WHERE l.step < 12 
    OR NOT EXISTS 
     (SELECT l.id 
      FROM loans 
      WHERE l.users_id = u.id 
     ) 
GROUP BY u.id 

现在,我可以选择所有用户,而他最后的贷款。谢谢,我认为我的解决方案将有助于未来的用户。

+4

什么列/值标识用户的最后贷款? – nos

+0

我有贷款表,每个贷款都有一个user_id,所有贷款都已关闭,有第12步,最后一个没有。 –

回答

1

,如果你想最后的贷款,你可以添加这样的事情

ORDER BY l.date DESC GROUP BY u.id 
+0

我已经试过了,只有一个相关的贷款让所有的用户都可以,没关系,但我只需要最后一笔贷款,而不是第一个关联的贷款。 –

+0

正如我对galador所说的,所有日期都发布在另一个表格(历史表格)中,所以我不能从日期或类似命令中订购。 –

+0

好的,我已经测试:... WHERE l.step <12 OR NOT NOT EXISTS(SELECT l.id FROM loans WHERE l.users_id = u.id)GROUP BY u.id及其工作原理。谢谢。 –

0

试试这个:

SELECT u.*, l.cod AS loans_cod, 
l.step AS loans_step 
FROM users AS u inner join 
(
    select max(l.loan_id) as loan_id, l.users_id , l.cod, l.step 
    from loans l 
    group by 
    l.users_id,l.cod,l.step 
) as l 
ON u.id = l.users_id 
WHERE u.id != :id 

注意:避免做select *这是一个非常不好的做法。列出您只需要的所有列。

+0

问题要求最后一笔贷款*每个用户* –

+0

@MartinSmith你是对的!改变我的答案 – Icarus

+0

如果我没有弄错,那只会给你贷款是最近的用户,而不是所有的用户和他们的最后贷款 – Daniel

1
SELECT u.*, 
     l.cod AS loans_cod, 
     l.step AS loans_step 
FROM users AS u 
     LEFT JOIN loans AS l 
     ON u.id = l.users_id 
WHERE u.id != :id 
    AND l.timestamp = (SELECT MAX(l.timestamp) 
         FROM loans AS l2 
         WHERE l2.users_id = l.users_id) 

timestamp在你的表中的列创建贷款时或指示,否则给你的时候,你可以比较。

+0

我以为这样,但是,所有日期都张贴在另一张表中,所以我不能使用时间戳或类似的。谢谢。 –