PHP / MySQL - 令人困惑的查询

时间:2011-03-01 22:21:57

标签: php mysql

我试图构建一个超过3个表的查询并且我完全被难倒...我的知识限制是基本的1表查询,我需要一些帮助才能将我的头放在搅拌机中。

我有以下查询

SELECT * FROM internalrole WHERE introle = $imarole

我对那部分很好..它的下一个让我都感到压力。

该查询返回以下列(id,user_id,introle,proven,used)

我需要做的是从返回的结果中获取user_id并使用它来获取以下内容

SELECT * FROM users WHERE id = user_id(from previous query) AND archive = 0 and status = 8

我需要将其放入1个查询中,但等待,还有更多....从结果那里,我需要检查用户的'id'是否在可用性表中,如果是,请检查日期(列名是日期),如果它与今天的日期匹配,则不返回该用户。

我需要把所有这些都放在一个查询中:S ...我没有想法怎么做,想着它让我摇头......如果有人可以帮助我,我会非常感激。< / p>

干杯,

4 个答案:

答案 0 :(得分:5)

使用INNER JOIN,它根据公共属性(通常是主要 - 外键关系)将表相互链接

说一个属性'id',链接table1和table2

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

要添加更多表,只需添加更多连接子句。

答案 1 :(得分:1)

SELECT u.*
    FROM internalrole ir 
        INNER JOIN users u
            ON ir.user_id = u.id
                AND u.archive = 0
                AND u.status = 8
        LEFT JOIN availability a
            ON ir.user_id = a.user_id
                AND a.date = CURDATE()
    WHERE ir.introle = $imarole
        AND a.user_id IS NULL /* User does NOT exist in availability table w/ today's date */

编辑:第二个查询基于以下评论,要求仅在可用性表中显示的用户。

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

答案 2 :(得分:0)

嗯,也许是这样的

SELECT * FROM users WHERE id IN (SELECT user_id FROM internalrole WHERE introle = $imarole) AND archive = 0 and status = 8;

让我记住的一个方便的事情是表格本质上是SQL中的数组。

HTH!

答案 3 :(得分:0)

嵌套查询是你的朋友。

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
相关问题