PHP/MySQL-混乱的查询
我试图构造一个超过3个表的查询,我完全被难住了。。。我的知识极限是基本的1表查询,在我把头伸进搅拌机之前,我需要一些帮助 我有以下疑问PHP/MySQL-混乱的查询,php,mysql,Php,Mysql,我试图构造一个超过3个表的查询,我完全被难住了。。。我的知识极限是基本的1表查询,在我把头伸进搅拌机之前,我需要一些帮助 我有以下疑问 SELECT * FROM internalrole WHERE introle = $imarole 我对那部分没意见。。这是下一个让我倍感压力的问题 该查询返回以下列(id、user\u id、introle、proven、used) 然后我需要做的是从返回的结果中获取用户id,并使用它来获取以下内容 SELECT * FROM users WHERE i
SELECT * FROM internalrole WHERE introle = $imarole
我对那部分没意见。。这是下一个让我倍感压力的问题
该查询返回以下列(id、user\u id、introle、proven、used)
然后我需要做的是从返回的结果中获取用户id,并使用它来获取以下内容
SELECT * FROM users WHERE id = user_id(from previous query) AND archive = 0 and status = 8
我需要把它放到一个查询中,但是等等,还有更多。。。。根据那里的结果,我需要检查该用户的“id”是否在可用性表中,如果在可用性表中,则检查日期(列名为date),如果它与todays日期匹配,则不返回该用户
我需要把所有这些放在一个查询中:S。。。我不知道怎么做,一想到它我就摇头。。。如果有人能帮助我,我将永远感激
干杯,嗯,也许是这样的
SELECT * FROM users WHERE id IN (SELECT user_id FROM internalrole WHERE introle = $imarole) AND archive = 0 and status = 8;
我要记住的一件方便的事情是,表本质上是SQL中的数组
嗯 使用内部联接,它基于公共属性(通常是主键-外键关系)将表彼此链接起来 说一个属性“id”,链接表1和表2
SELECT t1.att1, t2.att2
FROM table1 t1
INNER JOIN table2 t2
ON t1.id = t2.id --essentially, this links ids that are equal with each other together to make one large table row
要添加更多的表,只需添加更多的联接子句。嵌套查询是您的朋友
SELECT * FROM users WHERE id in (SELECT user_id FROM internalrole WHERE introle = $imarole) AND archive = 0 and status = 8
或者加入:
SELECT * FROM users INNER JOIN internalrole ON users.id = internalrole.user_id WHERE internalrole.user_id = $imarole AND users.archive = 0 and users.status = 8
编辑:第二个查询基于以下注释,要求仅显示可用性表中确实存在的用户
SELECT u.*
FROM internalrole ir
INNER JOIN users u
ON ir.user_id = u.id
AND u.archive = 0
AND u.status = 8
INNER JOIN availability a
ON ir.user_id = a.user_id
WHERE ir.introle = $imarole
+我本来打算用所需的具体问题来回答,但我认为最好是自己提出建议并得出答案。谢谢。。。我会调查一下,JOIN对我这样的新手来说有点可怕,尽管hahahI通常只考虑JOIN,因为到目前为止我的工作就是查询数据库。你会找到窍门的。连接几乎总是比子查询快得多嘿,谢谢你。。。这是一个开始。。。然后我如何检查其他数据的可用性表?@Dagon是的,连接更快@塞西尔刚刚加入可用性表格哇。。。那是个伤脑筋的人。。。谢谢你。。。这会返回所有不在可用性表中的“用户”吗?@Cecil:是的。这是期望的结果还是我误解了这个问题?这正是期望的结果。。。现在正在运行:)。。有没有办法扭转这种情况,以便显示用户是否存在于可用性表中?@Cecil:1。将左侧连接更改为内部连接,2。从联接条件和3中删除日期测试。从WHERE子句中删除用户id为NULL。是否可以将第三个表查询添加到嵌套查询中?
SELECT u.*
FROM internalrole ir
INNER JOIN users u
ON ir.user_id = u.id
AND u.archive = 0
AND u.status = 8
INNER JOIN availability a
ON ir.user_id = a.user_id
WHERE ir.introle = $imarole