PHP/MySQL-混乱的查询

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

我试图构造一个超过3个表的查询,我完全被难住了。。。我的知识极限是基本的1表查询,在我把头伸进搅拌机之前,我需要一些帮助

我有以下疑问

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