MYSQL与查询结果不同

MYSQL与查询结果不同,mysql,Mysql,我尝试使用MYSQL查询获得不同的结果: $sql = "SELECT un.*, co.order_product_quantity AS product_num, cu.first_name, cu.surname, cp.product_name, cp.product_thumbnail AS prod_img, co.order_goods_cost, co.order_delivery_cost, co.order_status as status FROM

我尝试使用MYSQL查询获得不同的结果:

    $sql = "SELECT un.*, co.order_product_quantity AS product_num, cu.first_name, cu.surname, cp.product_name, cp.product_thumbnail AS prod_img, co.order_goods_cost, co.order_delivery_cost, co.order_status as status
        FROM (
            SELECT DISTINCT order_unique_id AS o_id, order_date
            FROM cbs_orders
            GROUP BY order_unique_id
        ) un
            INNER JOIN cbs_orders co ON co.order_unique_id = un.o_id
            INNER JOIN cbs_users cu ON cu.id = co.order_user_id
            INNER JOIN cbs_products cp ON cp.product_id = co.order_product_id
        ORDER BY un.order_date DESC LIMIT $start_from, $num_rec_per_page ";
我希望从查询中获得DISTINCT order\u unique\u id,我最初从未编写过查询,我认为添加“SELECT DISTINCT order\u unique\u id”可以解决这个问题,但它仍然会返回重复的id

为所有的帮助干杯


格雷厄姆

您希望正确利用
分组依据
DISTINCT
在这种情况下对您没有帮助。另外,我很确定不需要子选择

试试这个

 $sql = "SELECT un.order_unique_id AS o_id, un.order_date,
 co.order_product_quantity AS product_num, 
 cu.first_name, cu.surname, cp.product_name, 
 cp.product_thumbnail AS prod_img, co.order_goods_cost, 
 co.order_delivery_cost, co.order_status as status
   FROM cbs_orders AS un
   INNER JOIN cbs_orders co ON co.order_unique_id = un.o_id
   INNER JOIN cbs_users cu ON cu.id = co.order_user_id
   INNER JOIN cbs_products cp ON cp.product_id = co.order_product_id
     GROUP BY un.order_unique_id
     ORDER BY un.order_date DESC 
     LIMIT $start_from, $num_rec_per_page ";

这可能会产生奇怪的结果,因为您没有应用到其他列。您可能需要使用这些来获得所需的结果。

让我冒昧地猜测一下,您只需要最新订单的记录。如果是这种情况,那么您可以通过正确聚合数据来做您想做的事情:

SELECT un.*, co.order_product_quantity AS product_num, cu.first_name,
       cu.surname, cp.product_name, cp.product_thumbnail AS prod_img,   
       co.order_goods_cost, co.order_delivery_cost, co.order_status as status
FROM (SELECT order_unique_id AS o_id, max(order_date) as order_date
      FROM cbs_orders
      GROUP BY order_unique_id
     ) un INNER JOIN
     cbs_orders co
     ON co.order_unique_id = un.o_id INNER JOIN
     cbs_users cu
     ON cu.id = co.order_user_id INNER JOIN
     cbs_products cp
     ON cp.product_id = co.order_product_id
ORDER BY un.order_date DESC
LIMIT $start_from, $num_rec_per_page;

如果您希望每个订单只有一行,那么您需要弄清楚如何处理这些产品。在我看来,这种解释与您当前的问题非常不同,您应该问另一个问题,提供样本数据和所需结果。

DISTINCT选择不同的结果行,而不是字段值。该概念将返回不同的行,因此您需要进行一些额外的操作。大家好,如果在order表中,每行有3个order_unique_id的1,我最初只想显示一次,现在它循环了3次,我还不是最擅长查询的lol我正在试验这个查询,对我来说似乎太复杂了lol