Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在子查询中使用限制_Mysql - Fatal编程技术网

Mysql 在子查询中使用限制

Mysql 在子查询中使用限制,mysql,Mysql,我有四张桌子 产品 地位 命令 订购产品 使用以下查询,我得到正确的结果,但顺序不正确,即结果是通过子查询得到的。我希望结果顺序作为子查询结果 SELECT p.products_id, p.products_image, p.products_tax_class_id, pd.products_name, if(s.status, s.specials_new_products_price, p.products_price) as products_price

我有四张桌子

  • 产品
  • 地位
  • 命令
  • 订购产品
使用以下查询,我得到正确的结果,但顺序不正确,即结果是通过子查询得到的。我希望结果顺序作为子查询结果

SELECT 
    p.products_id, p.products_image, p.products_tax_class_id,
    pd.products_name, if(s.status, s.specials_new_products_price,
    p.products_price) as products_price 
FROM
    products p LEFT JOIN specials s
        ON p.products_id = s.products_id, products_description pd 
WHERE
    p.products_status = '1' 
    AND p.products_id = pd.products_id 
    AND pd.language_id = '2' 
    AND p.products_id in (
        SELECT * from (
            SELECT
                distinct(op.products_id) 
            FROM
                orders_products op,orders o 
            WHERE
                op.orders_id=o.orders_id 
                AND o.customers_id='27' 
            ORDER BY
                o.date_purchased 
            DESC LIMIT 0,10 
        ) AS temptable
    )

外部选择具有按pd.products\U名称排序的订单。这才是应该适用的,而且仅此而已

子查询的顺序实际上并不重要。删除它时,您应该会得到相同的结果

如果您想要与pd.products\u name不同的排序顺序,则必须按所需列排序。在您的情况下,您需要将orders.date\u移动到查询的主要部分,以便使用它进行排序。反转查询,即从您想要的内容开始,并关联所有其他内容:

    SELECT MAX(o.date_purchased) AS date_purchased, DISTINCT (op.products_id) AS products_id
    p.products_id, p.products_image, p.products_tax_class_id, p.products_price
    pd.products_name,
    IF (s.status, s.specials_new_product_price, p.products_price) AS products_price

    FROM orders o

    LEFT JOIN orders_products op USING (orders_id)
    LEFT JOIN products p USING (products_id)
    LEFT JOIN products_description pd USING (products_id)
    LEFT JOIN specials s USING (products_id)
    WHERE o.customers_id = '27'
    AND p.products_status = 1
    AND pd.language_id = 2

为什么您不与
产品描述pd
进行
内部连接呢?如何使用orders.date\在queryIt的主要部分中购买的产品从您的代码中不清楚您在寻找什么,似乎您正在寻找最近购买的10种产品。反转查询可能会有所帮助-我会将其添加到上面的答案中。如果我删除MAX(o.date_purchased),上面的查询只会给出一条记录,它会给出结果,但有些行会重复。感谢ResponseSurry,因为我没有可测试的数据库,所以我不能确定。我会尝试两件事:删除MAX,使其显示SELECT o.date\u purchased,DISTINCT。。。或者尝试在末尾添加分组依据:分组依据产品id、产品图片、产品税类别id、产品价格、产品名称很棒,很乐意帮助。如果你高兴,就接受答案。