2013-05-01 77 views
3

我似乎無法使用distinctgroup by將某些mySQL記錄分組在一起。下面的SQL查詢只返回一行 - 我想要所有的值在CID雖然..如何使用MySQL組選擇多個記錄?

我想通過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 
+1

呃,只是用'取代'組by'插入第一個數據對它們進行排序和cid = 56'會給你描述的結果...?我不能很好地把握這個問題:) – 2013-05-01 16:45:11

+0

我不能在@JoachimIsaksson中攜帶該值我已經知道這個了我只想選擇一個沒有Id的組 – TheBlackBenzKid 2013-05-01 16:47:07

+0

''SELECT * FROM'Table1' WHERE'pid '='50' 和'cid' ='56' ORDER BY'sort_order' ASC'':應該給你你正在尋找的o/p! – NINCOMPOOP 2013-05-01 16:49:31

回答

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 

An SQLfiddle to test with

+0

這是選擇第一組還是隨機組? – TheBlackBenzKid 2013-05-02 08:09:49

+0

@TheBlackBenzKid它選擇具有最低「cid」的集合,如果它們按順序編號,則表示第一個集合。 – 2013-05-02 10:03:06

+0

複製和標記。這是一個很好的解決方案,速度也非常快。 – TheBlackBenzKid 2013-05-02 10:53:45

-1

不要使用group by對它們進行排序,你只需要在除了使用order by還必須使用特定的Customer IDCID只,你有值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