2011-09-30 47 views
0

我正在用这个查询处理我的问题。任何帮助将非常感激。我会尽量简单地将其分解,但请让我知道我是否太模糊。MySQL查询 - 连接时出现问题,过滤结果

有四个部分:刑事,家庭,公民和商业。每个人都有最后更新报告的用户的判断ID和用户ID以及报告信息。

然后有一个用户表,用户ID和用户类型。

有一个判断表和一个判断ID和裁判的名字。

我想要做的事情:根据当前的月份和年份,从四个部分之一($ court)获取所有当前报告,找到与每个判定ID相对应的每个判定的姓名,然后(这是我遇到问题的地方)根据userType'user'(而不是admin)的用户标识过滤报告。

这里是我(在PHP有一点点):

$query = "SELECT Name FROM judges LEFT JOIN $court 
     ON ($court.JudgeID = judges.JudgeID) 
     where Month='$month' and Year='$year' order by Name asc;"; 

这是由我遇到的麻烦的用户类型的用户id只是后续的滤波。

+0

动态表名是一个主要的SQL注入头痛。确保你将其注入查询之前检查'与允许表名的白名单$ court',请参阅:http://stackoverflow.com/questions/5811834/how-to-prevent-sql-injection-with-dynamic-tablenames – Johan

回答

2

添, 我不知道我完全理解的要求,但让我们先从这个查询,看看会发生什么。

$query = "SELECT Name FROM judges LEFT JOIN $court 
     ON ($court.JudgeID = judges.JudgeID) 
     LEFT JOIN users 
     ON ($court.userid = users.userid) and user.userType='user' 
     where Month='$month' and Year='$year' order by Name asc;"; 
+0

非常感谢!像魅力一样工作! –

1

试试这个:

SELECT Name 
FROM judges 
LEFT JOIN $court ON ($court.JudgeID = judges.JudgeID) 
LEFT JOIN users ON ($court.userID = users.userID) 
WHERE Month='$month' AND Year='$year' AND users.userType = 'user' 
ORDER BY Name ASC;