在另一个表的帮助下从一个表中获取数据

时间:2014-07-17 14:48:14

标签: mysql

对不起标题,我不知道如何在短时间内描述问题。

我不知道我是否正在问正确的地方(使用正确的标签),以及你们理解的方式,但我会尝试:)

首先,我的英语不太好,我很难描述我的问题,所以要好好:)

我想在我的表格中获取这些内容: 我的数据库中有2个表。一个db_users和db_tasks

db_users: [UID] [UNAME] [uActive]

db_tasks [TID] [tUserId] [T1] [T2] [T3] [T4] [T5] [T6] [tYear]

我用这样的用户ID链接它们:uId = tUserId

然后我只想让db_users的用户得到0分,分别是task5(t5)和task6(t6),而且是2014年

并非所有用户都要求解决任务,因此并非所有用户都在db_tasks中注册 一些用户已经解决了任务1和2,并在db_tasks中注册了

我想获得以下数据: uId,uName如果用户在db_tasks中,那么如果用户不在db_tasks tId = 0中,我想要tId = tId。

我希望所有这一切都在一个sql =" select .....查询中,因为我将数据存储在我的查看器中(该页面位于MVC franework中)。

我想在我的网页上列出一个列表:

echo $uId.' - '.$uName.' ('if($tId > 0){ echo 0; } else { echo $tId }')';

我试图加入,如果案例和我想到的每一件事,但没有任何作用。 是否有可能在不改变表格和数据库结构的情况下做我想做的事情?

1 个答案:

答案 0 :(得分:1)

这可以让所有用户和tId(如果有...)

SELECT uId, uName, COALESCE(tId, 0) 
FROM db_users u LEFT JOIN db_tasks t 
ON u.uId=t.tUserId

这是为了让用户在2014年的t5和t6获得0

SELECT uId, uName, tId FROM db_users u INNER JOIN db_tasks t 
ON u.uId=t.tUserId WHERE tYear=2014 
AND (t5=0 OR t6=0)

我希望这些帮助,因为我不确定我是否理解得很好,但我相信你可以从这里出发并达到你想要的效果。

<强>更新 试试这个:

SELECT uId, uName, 0 as tId FROM db_users 
WHERE uId NOT IN (SELECT tUserId FROM db_tasks)
UNION
SELECT uId, uName, tId FROM db_users u INNER JOIN db_tasks t
ON u.uId=t.tUserId WHERE tYear=2014 
AND (t5=0 OR t6=0)