对不起标题,我不知道如何在短时间内描述问题。
我不知道我是否正在问正确的地方(使用正确的标签),以及你们理解的方式,但我会尝试:)
首先,我的英语不太好,我很难描述我的问题,所以要好好:)
我想在我的表格中获取这些内容: 我的数据库中有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 }')';
我试图加入,如果案例和我想到的每一件事,但没有任何作用。 是否有可能在不改变表格和数据库结构的情况下做我想做的事情?
答案 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)