Mysql sql子查询中的Access变量

Mysql sql子查询中的Access变量,mysql,sql,database,pdo,Mysql,Sql,Database,Pdo,大家好,stackoverflow 我正在生成一个SQL字符串,从中可以获得每个计划的最新订单(仅一个) 我的SQL字符串现在看起来像这样: $sql = "SELECT o.order_id, p.plan_id, u.user_id, m.module_id, c.title AS category_title, m.title FR

大家好,stackoverflow

我正在生成一个SQL字符串,从中可以获得每个计划的最新订单(仅一个)

我的SQL字符串现在看起来像这样:

$sql = "SELECT
            o.order_id,
            p.plan_id,
            u.user_id,
            m.module_id,
            c.title AS category_title,
            m.title
        FROM 
            (SELECT
                user_id,
                status,
                order_id,
                payment_method_id,
                time_created
            FROM
                orders
            ORDER BY
                order_id DESC) AS o
        JOIN
            plans AS p
        ON
            p.user_id = o.user_id
        JOIN
            modules AS m
        ON
            p.module_id = m.module_id
        JOIN
            categories AS c
        ON
            m.category_id = c.category_id
        JOIN
            users AS u
        ON
            p.user_id = u.user_id
        WHERE
            p.status = :status
        AND
            p.payment = 0
        AND
            o.status = :status
        AND
            p.subscription_id != ''
        GROUP BY
            p.plan_id";

// Here i get the status variable
$stmt->bindParam(':status', $status, PDO::PARAM_INT);
我想做的是:

$sql = "SELECT
            o.order_id,
            p.plan_id,
            u.user_id,
            m.module_id,
            c.title AS category_title,
            m.title
        FROM 
            (SELECT
                user_id,
                status,
                order_id,
                payment_method_id,
                time_created
            FROM
                orders
            WHERE
                module_id = p.module_id
            AND
                user_id = p.user_id
            LIMIT 1
            ORDER BY
                order_id DESC) AS o
        JOIN
            plans AS p
        ON
            p.user_id = o.user_id
        JOIN
            modules AS m
        ON
            p.module_id = m.module_id
        JOIN
            categories AS c
        ON
            m.category_id = c.category_id
        JOIN
            users AS u
        ON
            p.user_id = u.user_id
        WHERE
            p.status = :status
        AND
            p.payment = 0
        AND
            o.status = :status
        AND
            p.subscription_id != ''
        GROUP BY
            p.plan_id";
我在访问子查询中的
p.module\u id
p.user\u id
变量时遇到了很大的麻烦


我的问题是:如何访问子查询中的
p.module\u id
p.user\u id
?或者有更好的方法吗?

你不能这么做。。。试试这个:

$sql = "SELECT o.order_id, p.plan_id, u.user_id, m.module_id, c.title AS category_title, m.title
    FROM 
        (SELECT user_id, status, order_id, module_id, payment_method_id, time_created
           FROM orders ORDER BY order_id DESC) AS o
    JOIN
        plans AS p ON p.user_id = o.user_id
    JOIN
        modules AS m ON p.module_id = m.module_id AND m.module_id=o.module_id
    JOIN
        categories AS c ON m.category_id = c.category_id
    JOIN
        users AS u ON p.user_id = u.user_id
    WHERE
        p.status = :status AND p.payment = 0 AND o.status = :status AND p.subscription_id != ''
        AND p.user_id is not null AND m.module_id is not null
    GROUP BY p.plan_id";
在查询的最后尝试限制1也

在这里,您希望从orders表中获取记录,这些记录具有计划的用户id和模块的模块id,您可以在连接条件中添加这些记录,并确保这些记录在主查询的WHERE子句中不为空。由于user_id条件已经存在,所以我只在modules表的连接条件和两个where条件中添加了module_id