PHP删除第二个记录组名称
任何人都知道如何使用相同的组对记录进行分组,但下一行的组名在PHP/MySQL中为空,例如: 数据库表上的记录:PHP删除第二个记录组名称,php,mysql,sql,Php,Mysql,Sql,任何人都知道如何使用相同的组对记录进行分组,但下一行的组名在PHP/MySQL中为空,例如: 数据库表上的记录: | id | group_title | item | qty | price | 1 | G-01 | Mouse | 1 | $5 | 2 | G-01 | Keyboard | 1 | $12 | 3 | G-01 | Keyboard | 1 | $12 | 4 | G-01
| id | group_title | item | qty | price
| 1 | G-01 | Mouse | 1 | $5
| 2 | G-01 | Keyboard | 1 | $12
| 3 | G-01 | Keyboard | 1 | $12
| 4 | G-01 | Cable | 1 | $1
| 5 | G-02 | Headset | 1 | $20
预期结果:
| Group | Item Name | Qty | Price/qty | Price Total/item | Price Total/group
| G-01 | Mouse | 1 | $5 | $5 | $30
| | Keyboard | 2 | $12 | $24 |
| | Cable | 1 | $1 | $1 |
| G-02 | Headset | 1 | $20 | $20 | $20
我已经尝试了很多天,但仍然没有解决。
提前感谢。您可以使用一个简单的IF和一个uservar来完成它,如以下查询:
SELECT
IF(g.gname = @myg, '', @myg:= gname) AS gname,
g.mytext
FROM grouptab g
CROSS JOIN ( SELECT @myg:='') AS init
ORDER BY g.gname;
样本
MariaDB [test]> select * from grouptab;
+----+-------+---------+
| id | gname | mytext |
+----+-------+---------+
| 1 | G01 | Name 1 |
| 2 | G01 | Name 2 |
| 3 | G02 | Name 88 |
| 4 | G02 | Name 99 |
| 5 | G01 | Name 4 |
+----+-------+---------+
5 rows in set (0.000 sec)
MariaDB [test]> SELECT
-> IF(g.gname = @myg, '', @myg:= gname) AS gname,
-> g.mytext
-> FROM grouptab g
-> CROSS JOIN ( SELECT @myg:='') AS init
-> ORDER BY g.gname;
+-------+---------+
| gname | mytext |
+-------+---------+
| G01 | Name 1 |
| | Name 2 |
| | Name 4 |
| G02 | Name 88 |
| | Name 99 |
+-------+---------+
5 rows in set (0.000 sec)
MariaDB [test]>
您可以使用一个简单的IF和一个uservar来执行此操作,如以下查询:
SELECT
IF(g.gname = @myg, '', @myg:= gname) AS gname,
g.mytext
FROM grouptab g
CROSS JOIN ( SELECT @myg:='') AS init
ORDER BY g.gname;
样本
MariaDB [test]> select * from grouptab;
+----+-------+---------+
| id | gname | mytext |
+----+-------+---------+
| 1 | G01 | Name 1 |
| 2 | G01 | Name 2 |
| 3 | G02 | Name 88 |
| 4 | G02 | Name 99 |
| 5 | G01 | Name 4 |
+----+-------+---------+
5 rows in set (0.000 sec)
MariaDB [test]> SELECT
-> IF(g.gname = @myg, '', @myg:= gname) AS gname,
-> g.mytext
-> FROM grouptab g
-> CROSS JOIN ( SELECT @myg:='') AS init
-> ORDER BY g.gname;
+-------+---------+
| gname | mytext |
+-------+---------+
| G01 | Name 1 |
| | Name 2 |
| | Name 4 |
| G02 | Name 88 |
| | Name 99 |
+-------+---------+
5 rows in set (0.000 sec)
MariaDB [test]>
为什么您希望组名为空?你怎么知道第二排和第三排属于哪一组?如果是显示要求,不要显示它,但IMO应该在数据行中。您应该考虑在应用程序代码(如:PHP、java、C++等)中处理这些数据显示相关的要求,更新您的问题并添加您正在使用的代码,以在PHP循环中解析您的数组,并使用Actuula结果。只需初始化一个小的占位符,以便在占位符值与当前值相同时可以打印“”。为什么要使用空白组名?你怎么知道第二排和第三排属于哪一组?如果是显示要求,不要显示它,但IMO应该在数据行中。您应该考虑在应用程序代码(如:PHP、java、C++等)中处理这些数据显示相关的要求,更新您的问题并添加您正在使用的代码,以在PHP循环中解析您的数组,并使用Actuula结果。只需初始化一个小的占位符,以便在占位符值与当前值相同时可以打印“”。如果应用程序代码可用,则上面的方法似乎是错误的如果应用程序代码可用,则上面的方法似乎是错误的