Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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_Sql - Fatal编程技术网

Mysql:按图书名称分组(但也按上次更新的成本)

Mysql:按图书名称分组(但也按上次更新的成本),mysql,sql,Mysql,Sql,我需要显示客户(ID)通常消费的所有产品,有些产品有特殊价格。当然,客户可以再次购买相同的产品,但可能需要另一个价格 Structure orders table CREATE TABLE orders ( order_id mediumint(8) unsigned not null auto_increment, cl_id mediumint(8) unsigned not null default '0', order_date int(10) unsigned not null def

我需要显示客户(ID)通常消费的所有产品,有些产品有特殊价格。当然,客户可以再次购买相同的产品,但可能需要另一个价格

Structure orders table
CREATE TABLE orders (
order_id mediumint(8) unsigned not null auto_increment,
cl_id mediumint(8) unsigned not null default '0',
order_date int(10) unsigned not null default '0',
order_note varchar(255) not null default '',
PRIMARY KEY (order_id),
KEY cl_id (cl_id)
);
这是我的sql:

SELECT cl.cl_name, or.order_id, pro.pro_name, detal.detal_price
FROM consumers cl
LEFT JOIN orders or
ON cl.cl_id = or.cl_id
LEFT JOIN order_detail detal
ON or.order_id = detal.order_id
LEFT JOIN products pro
ON detal.pro_id = pro.pro_id
WHERE cl.cl_id = 5
GROUP BY pro.pro_name

好的,我使用“分组方式”来避免重复相同的产品名称。但我也需要显示价格,但最后更新的价格。我认为需要使用“订单日期”,但我需要一些帮助。

您可以使用
子字符串\u index()
/
组\u concat()
技巧获取最后的价格:

SELECT c.cl_name, p.pro_name,
       substring_index(group_concat(d.detal_price order by order_date desc), ',', 1) as MostRecentPrice
FROM consumers cl LEFT JOIN
     orders o
     ON c.cl_id = o.cl_id LEFT JOIN
     order_detail detal
     ON o.order_id = d.order_id LEFT JOIN
     products p
     ON d.pro_id = p.pro_id
WHERE c.cl_id = 5
GROUP BY c.cl_name, p.pro_name;
我对查询做了一些其他更改:

  • 修复了表别名。因为
    是SQL中的关键字,所以对于表别名来说,这是一个错误的选择。我把它们都短路了
  • c.cl\u名称
    添加到
    分组依据
    。这在MySQL中是不需要的,但在其他方言中是需要的。另外,避免查询中的错误也是一个好习惯
  • 已删除订单id。这在查询中是毫无意义的,因为您不是在订单级别进行聚合

谢谢戈登,我很感激。