Mysql sql子查询中的Access变量
大家好,stackoverflow 我正在生成一个SQL字符串,从中可以获得每个计划的最新订单(仅一个) 我的SQL字符串现在看起来像这样: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
$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