3

我似乎无法使用distinctgroup by将某些 mySQL 记录组合在一起。下面的这个 SQL 查询每个只返回一行 - 不过我想要 CID 中的所有值..

我想通过 cid 或表中的第一组选择一个随机组..我不能使用 AND CID=X ..有没有办法做到这一点没有..

桌子

id      pid     image                           sort_order      cid
-----
2474    50      data/low.jpg            2                       56
2473    50      data/hi.jpg             3                       59
2471    50      data/thumn.jpg      500                     59
2472    50      data/front.jpg      1000                    56
2470    50      data/back.jpg           1                       56

询问

SELECT *
FROM `ocm1__product_image`
WHERE `product_id` = '50'
GROUP BY `cid`
ORDER BY `ocm1__product_image`.`sort_order` ASC
LIMIT 0 , 30

这应该返回

id      pid     image                           sort_order      cid
2474    50      data/low.jpg            2                       56
2472    50      data/front.jpg      1000                    56
2470    50      data/back.jpg           1                       56

但它返回两种颜色..我不能唯一的组吗?

它返回这是错误的,我想列出所有 cid 唯一值

id      pid     image                           sort_order      cid
2474    50      data/low.jpg            2                       56
2471    50      data/thumn.jpg      500                     59
4

2 回答 2

2

cid这将返回所请求的最低的所有条目pid
它给出的结果与您所说的需要相同,但没有给出具体cid的条件;

SELECT o1.*
FROM `ocm1__product_image` o1
LEFT JOIN `ocm1__product_image` o2
  ON o1.pid=o2.pid AND o1.cid > o2.cid
WHERE o1.`pid` = '50' AND o2.cid IS NULL
ORDER BY `o1`.`sort_order` ASC
LIMIT 0 , 30

一个用于测试的 SQLfiddle

于 2013-05-01T17:17:42.443 回答
-1

不要使用group by对它们进行排序,您只需要使用order by此外还必须使用CID特定值对它们进行排序Customer ID,您拥有该值Product ID (PID)但您没有将 CID 值提供到您的样本中。

SELECT *
FROM `ocm1__product_image`
WHERE `product_id` = '50' and `cid` = '56'
ORDER BY `ocm1__product_image`.`sort_order` ASC
LIMIT 0 , 30

或者如果您想使用 对它们进行排序ID,以了解使用 插入的第一个数据在哪里primary key

SELECT *
FROM `ocm1__product_image`
WHERE `product_id` = '50' and `cid` = '56'
ORDER BY `ocm1__product_image`.`id` ASC
LIMIT 0 , 30
于 2013-05-01T18:00:30.497 回答