我目前有:
SELECT tbl_review.*, users.first_name, users.last_name, (
SELECT order_ns.tran_date
FROM order_ns
LEFT JOIN product_2_order_ns.external_order_id = order_ns.order_id
WHERE product_2_order_ns.bkfno IN :id
ORDER BY order_ns.trandate ASC
LIMIT 1
) as purchase_date
FROM tbl_review
LEFT JOIN users ON users.sequal_user_id = tbl_review.user_id
WHERE tbl_review.product_id IN :id AND tbl_review.approved = 1
它在其子查询中选择用户所拥有的有问题产品(在
:id
中定义)的订单,以找到其中一个找到的订单的最早的交易日期。我真的很想将其保留在数据库的一次调用中(不想真的只为一个字段的每个返回用户再次调用,甚至不想对所有用户进行范围查询),但是显然此特定查询无法正常工作。
我要怎么做才能使它正常工作?
我无法使子查询成为联接,因为它们是两个截然不同的数据,子查询需要返回主查询中每一行的详细信息。
最佳答案
我认为您只需要一个相关的子查询。目前尚不清楚内部查询和外部查询之间的关系是什么。我的猜测是,它取决于用户和订单:
SELECT tbl_review.*, users.first_name, users.last_name,
(SELECT order_ns.tran_date
FROM order_ns LEFT JOIN
product_2_order_ns
on product_2_order_ns.external_order_id = order_ns.order_id and
product_2_order_ns.bkfno = tbl_review.product_id and
WHERE order_ns.user_id = tbl_review.user_id
ORDER BY order_ns.trandate ASC
LIMIT 1
) as purchase_date
FROM tbl_review LEFT JOIN
users
ON users.sequal_user_id = tbl_review.user_id
WHERE tbl_review.product_id IN :id AND tbl_review.approved = 1;
编辑:
哦,内部查询与外部查询没有关系。那就容易了。使用
from
将其移至cross join
子句:SELECT tbl_review.*, users.first_name, users.last_name,
innerquery.tran_date as purchase_date
FROM tbl_review LEFT JOIN
users
ON users.sequal_user_id = tbl_review.user_id cross join
(SELECT order_ns.tran_date
FROM order_ns LEFT JOIN
product_2_order_ns
on product_2_order_ns.external_order_id = order_ns.order_id
WHERE product_2_order_ns.bkfno IN :id
ORDER BY order_ns.trandate ASC
LIMIT 1
) innerquery
WHERE tbl_review.product_id IN :id AND tbl_review.approved = 1;
关于php - MySQL选择一个复杂的子查询作为字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18744575/