Php 基于第一个表';内容

Php 基于第一个表';内容,php,mysql,sql,Php,Mysql,Sql,我试图提出一个查询,其中第三个表将连接另两个表。问题是第一个表有不同的版本,我需要查询查看表1中的一列,然后选择要联接的正确表,但结果查询必须返回表1中的所有行,只需将额外的表3联接到满足WHERe子句的特定行即可。这可能吗 示例: 表1=用户 表2=横幅 表3=UserSettings或AdminSettings或Nothing 查询将显示… 我目前的问题是: $query = "SELECT * FROM Users as U WHERE U.user_id = :id "; $query

我试图提出一个查询,其中第三个表将连接另两个表。问题是第一个表有不同的版本,我需要查询查看表1中的一列,然后选择要联接的正确表,但结果查询必须返回表1中的所有行,只需将额外的表3联接到满足WHERe子句的特定行即可。这可能吗

示例:

表1=用户

表2=横幅

表3=UserSettings或AdminSettings或Nothing

查询将显示…

我目前的问题是:

$query = "SELECT * FROM Users as U WHERE U.user_id = :id ";
$query .= "LEFT JOIN Banners as B ON U.banner_id = B.banner_id ";
$query .= "LEFT JOIN AdminSettings ON U.server_id = AdminSettings.user_id WHERE U.rank='Admin' ";
$query .= "LIMIT 1";

问题是它只显示包含User.rank='admin'的行,而不显示User.rank='User'所在的行

连接
表3
两次,并在select语句中使用
CASE

SELECT  a.*,
        b.*
        CASE WHEN a.rank = 'admin' 
            THEN c.user_ID                     -- gets value from AdminSettings
            ELSE d.user_ID                     -- gets value from UserSettings
        END as ColName1,
        CASE WHEN a.rank = 'admin' 
            THEN c.colName                     -- gets value from AdminSettings
            ELSE d.colName                     -- gets value from UserSettings
        END as ColName2
FROM    users a
        INNER JOIN banners b
            ON a.banner_id = b.banner_id
        LEFT JOIN  AdminSettings c
            ON a.server_ID = c.user_ID
        LEFT JOIN UserSettings d
            ON a.server_ID = d.user_ID

尝试在字段列表中使用IF子句,如下所示:

$query = "SELECT field1, field2, field3, IF(User.rank = 'admin', A.field, B.field)";
$query .= " FROM Users as U";
$query .= " LEFT JOIN Banners as B ON U.banner_id = B.banner_id";
$query .= " LEFT JOIN AdminSettings as A ON U.server_id = A.user_id";
$query .= " LIMIT 1";
像这样的事情应该会奏效

$query = "SELECT field1, field2, field3, IF(User.rank = 'admin', A.field, B.field)";
$query .= " FROM Users as U";
$query .= " LEFT JOIN Banners as B ON U.banner_id = B.banner_id";
$query .= " LEFT JOIN AdminSettings as A ON U.server_id = A.user_id";
$query .= " LIMIT 1";