一个MySQL语句问题
高洛峰
高洛峰 2017-04-17 13:15:06
[MySQL讨论组]

下面SQL查询出来的结果如下:

SELECT * FROM item_img_spec WHERE item_id = 2 ORDER BY sort ASC, item_img_spec_id DESC

怎么让他 spec_id 相同的只显示一条

变成这样


SELECT * FROM item_img_spec WHERE item_id = 2 GROUP BY spec_id ORDER BY sort ASC, item_img_spec_id DESC

谢谢大家,直接这样就可以啦

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(4)
PHP中文网

SELECT distinct spec_id FROM item_img_spec WHERE item_id = 2 ORDER BY sort ASC, item_img_spec_id DESC

伊谢尔伦
SELECT distinct spec_id ,item_id,img_id,spec_id FROM item_img_spec WHERE item_id = 2 ORDER BY sort ASC, item_img_spec_id DESC

spec_id去重试试

高洛峰

需要做多次的 Group By 才能得到:

SELECT item_img_spec_id, spec_id ,item_id,img_id,sort FROM item_img_spec A
WHERE A.item_id = 2
AND EXISTS(
        SELECT 1 FROM item_img_spec B Group BY spec_id
        HAVING A.sort = Min(B.sort)    
    )
AND EXISTS(
        SELECT 1 FROM item_img_spec C Group BY C.sort
        HAVING A.item_img_spec_id = MAX(C.item_img_spec_id)
    ) 
ORDER BY sort ASC;
大家讲道理

如果item_img_spec_id是表的主键,可以这样写,在spec_id相同保留的情况下保留item_img_spec_id最大的记录

SELECT * FROM item_img_spec t1
    INNER JOIN (
        SELECT spec_id, max(item_img_spec_id)
        FROM item_img_spec 
        WHERE item_id = 2
        GROUP BY spec_id
    ) t2
    ON t1.item_img_spec_id = t2.item_img_spec_id
ORDER BY t1.sort ASC, t1.item_img_spec_id DESC
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号