Php 在sql中查找重复项并合并其值
我有一个数据库表,其中包含学校和名称的列表: school name point ------------------------ first dani good first dani precise third John nice first dani pro third John cute 学校名称点 ------------------------ 首先丹尼很好 第一,丹尼精密 第三约翰尼斯 第一丹尼专业 第三个约翰很可爱 我希望每个学校/名称组合只包含一条记录,并合并以下点值: school name point -------------------------------------- first dani good and precise and pro third John cute and nice 学校名称点 -------------------------------------- 首先,丹尼优秀、精准、专业 第三个约翰又可爱又好Php 在sql中查找重复项并合并其值,php,mysql,sql,Php,Mysql,Sql,我有一个数据库表,其中包含学校和名称的列表: school name point ------------------------ first dani good first dani precise third John nice first dani pro third John cute 学校名称点 ------------------------ 首先丹尼很好 第一,丹尼精密 第三约翰尼斯 第一丹尼专业 第
您可以像这样使用
GROUP\u CONCAT
来获得结果:
SELECT school, name, GROUP_CONCAT(point SEPARATOR ' and ') points
FROM table
GROUP BY school, name
如果没有问题,您想用结果替换实际表,
例如,使用另一个名称tmptable创建同一个表
INSERT INTO tmptable
SELECT school, name, GROUP_CONCAT(point SEPARATOR ' and ') points
FROM table
GROUP BY school, name;
DROP TABLE table;
RENAME TABLE tmptable TO table;
在这里,您可以在一个中看到结果。您可以使用类似的
GROUP\u CONCAT
来获得结果:
SELECT school, name, GROUP_CONCAT(point SEPARATOR ' and ') points
FROM table
GROUP BY school, name
如果没有问题,您想用结果替换实际表,
例如,使用另一个名称tmptable创建同一个表
INSERT INTO tmptable
SELECT school, name, GROUP_CONCAT(point SEPARATOR ' and ') points
FROM table
GROUP BY school, name;
DROP TABLE table;
RENAME TABLE tmptable TO table;
在这里,您可以在一个中看到结果。这是一个适用于您的示例 和一个新的具有不同的
SELECT
school,
`name`,
GROUP_CONCAT( `point` SEPARATOR ' and ')
FROM ( SELECT DISTINCT school,`name`, `point` FROM groupme) AS result
GROUP BY school,`NAME`;
样本
MariaDB [mysql]> select * from groupme;
+----+--------+------+---------+
| id | school | name | point |
+----+--------+------+---------+
| 1 | first | dani | good |
| 2 | first | dani | precise |
| 3 | third | John | nice |
| 4 | first | dani | pro |
| 5 | third | John | cute |
+----+--------+------+---------+
5 rows in set (0.01 sec)
MariaDB [mysql]> SELECT school, `name` , GROUP_CONCAT( `point` SEPARATOR ' and ')
-> FROM groupme
-> GROUP BY school,`name`;
+--------+------+------------------------------------------+
| school | name | GROUP_CONCAT( `point` SEPARATOR ' and ') |
+--------+------+------------------------------------------+
| first | dani | good and precise and pro |
| third | John | nice and cute |
+--------+------+------------------------------------------+
2 rows in set (0.00 sec)
MariaDB [mysql]>
这是一个适用于您的示例 和一个新的具有不同的
SELECT
school,
`name`,
GROUP_CONCAT( `point` SEPARATOR ' and ')
FROM ( SELECT DISTINCT school,`name`, `point` FROM groupme) AS result
GROUP BY school,`NAME`;
样本
MariaDB [mysql]> select * from groupme;
+----+--------+------+---------+
| id | school | name | point |
+----+--------+------+---------+
| 1 | first | dani | good |
| 2 | first | dani | precise |
| 3 | third | John | nice |
| 4 | first | dani | pro |
| 5 | third | John | cute |
+----+--------+------+---------+
5 rows in set (0.01 sec)
MariaDB [mysql]> SELECT school, `name` , GROUP_CONCAT( `point` SEPARATOR ' and ')
-> FROM groupme
-> GROUP BY school,`name`;
+--------+------+------------------------------------------+
| school | name | GROUP_CONCAT( `point` SEPARATOR ' and ') |
+--------+------+------------------------------------------+
| first | dani | good and precise and pro |
| third | John | nice and cute |
+--------+------+------------------------------------------+
2 rows in set (0.00 sec)
MariaDB [mysql]>
使用@ebahi的答案: 将查询更改为@fuzzytree所述的:
SELECT school, name, GROUP_CONCAT(distinct point SEPARATOR ' and ') points
FROM table
GROUP BY school, name
使用@ebahi的答案查看结果: 将查询更改为@fuzzytree所述的:
SELECT school, name, GROUP_CONCAT(distinct point SEPARATOR ' and ') points
FROM table
GROUP BY school, name
要查看结果您是想要一个实际的新表,其中数据的格式是这样的,还是只需要将其放在某种数组中,以便在php代码中使用?我想要删除重复项,并保留一行,并使用此更新来解释您有重复点,这是您在问题中不想要的。另外,尝试使用一些重复的行更新表,并显示您想要的结果作为示例。您想要一个实际的新表,其中数据的格式是这样的,还是只需要在php代码中使用它作为某种数组?我想要删除重复项并保留一行,并使用此更新解释您有重复点,这是你不想在你的问题中看到的。另外,尝试用一些重复的行更新您的表,并显示您想要的结果作为示例。不起作用,如果“学校值”和“名称值”相同,但“我的表”中的值不同,则代码起作用我不这么认为。。。你测试过了吗?是的。。。我测试了它,发现school和name的值是相同的,在我的表中,这些值是相同的different@ebahi-您的答案也100%正确。我不知道是什么happens@BerndBuffen我猜他想要的是不同的,也就是说,分组(不同点…不起作用,如果学校值和名字值相同,但在我的表格中有不同的值,则代码起作用。我不这么认为……您进行了测试吗?是的……我测试了它,发现学校值和名字值相同,在我的表格中,这些值是相同的different@ebahi你的答案也是100%正确。我不知道是什么happens@BerndBuffen我猜他想要
不同的即组(distinct point…
查找school和name相同的行,在我的表中此值不同我不明白,您测试过了吗。发布您的表我又添加了一个具有distinct的sql。因此每个点在结果中只出现一次查找school和name相同的行,在我的表中此值不同我不明白,哈我已经添加了一个带有DISTINCT的sql,所以每个点在结果中只出现一次