mysql 去重问题

1. 运行环境

mysql 5.6

1). 当前使用的 Laravel 版本?

2). 当前使用的 php/php-fpm 版本?

PHP 版本:

php-fpm 版本:

3). 当前系统

4). 业务环境

5). 相关软件版本

2. 问题描述?

话不多收,直接上图:

mysql 去重问题
我使用 where 条件查出来这些数据,想在这个数据或者 sql 基础上去掉重复的数据,规则就是:如果 p_id 数值为 0 的话,就正常展示,如果不是 0 的话,就只保留一条数据。

因为去重之后还要分页
//: <> (代码问题的话,请提供一份最短的,可复现问题的代码。或者相关代码)

3. 您期望得到的结果?

例如上面的数据,有很多为 0 的数据,都需要保留,p_id = chap_2HFoHbf7Q6HF75eeEzYdECjRVPA 的数据有两条,那就只保留一条。
//: <> (能截图就截图。)

4. 您实际得到的结果?

采用了 DISTINCT 和 GROUP BY 都会对 0 也进行去重或者分组,不符合预期结果。由于数据过多,为了性能问题,不建议使用 JOIN 或者 UNION 函数。

请求各位大佬帮助
//: <> (有报错信息的话把堆栈信息提供出来)

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 4
SELECT
    * 
FROM
    表名 
WHERE
    p_id = 0 
    OR 主键 id IN ( SELECT 主键 id FROM 表名 WHERE p_id != 0 GROUP BY p_id HAVING COUNT(*) > 1 )
1年前 评论
altruism 1年前

file

SELECT *
FROM A
WHERE pid = 0 OR ( id IN (
  SELECT MIN(id)
  FROM A
  WHERE pid <> 0
  GROUP BY pid
));

这可以。

1年前 评论
SELECT 
    `id`, IF(`p_id`= 0, CONCAT('zero-', id), `p_id`) as `groupp`
FROM `table`
GROUP BY `groupp`

循环的时候过滤 zero-xxx改回0

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!