Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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/8/meteor/3.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
Php 在sql中查找重复项并合并其值_Php_Mysql_Sql - Fatal编程技术网

Php 在sql中查找重复项并合并其值

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 学校名称点 ------------------------ 首先丹尼很好 第一,丹尼精密 第三约翰尼斯 第一丹尼专业 第

我有一个数据库表,其中包含学校和名称的列表:

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 学校名称点 -------------------------------------- 首先,丹尼优秀、精准、专业 第三个约翰又可爱又好
您可以像这样使用
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,所以每个点在结果中只出现一次