2009-12-09 112 views
1

我有这样的代码MySQL查询:最佳查询

SELECT DISTINCT idx_campus_bookinfo,c.userid as Buyer,bookname,book_explain,writedate 
FROM campus_bookinfo cb 
LEFT JOIN user_books ub ON idx_campus_bookinfo = id_product 
LEFT JOIN customer c ON ub.id_customer = c.id_customer 
where cb.idx_campus = 1 and cb.idxuser = 29 ORDER BY writedate DESC 

这给的

Click to View output

输出我的问题是如何让买家列由逗号具有分隔同一本书。

回答

3

使用GROUP_CONCAT功能,但它意味着具有与基置换DISTINCT BY:

SELECT idx_campus_bookinfo, 
      GROUP_CONCAT(c.userid SEPARATOR ',') as Buyer, 
      bookname, 
      book_explain, 
      writedate 
     FROM campus_bookinfo cb 
LEFT JOIN user_books ub ON idx_campus_bookinfo = id_product 
LEFT JOIN customer c ON ub.id_customer = c.id_customer 
    WHERE cb.idx_campus = 1 
     AND cb.idxuser = 29 
GROUP BY idx_campus_bookinfo, bookname, book_explain, writedate 
ORDER BY writedate DESC 

一个后续问题,我可以排序的用户ID?

是的,你可以:

SELECT idx_campus_bookinfo, 
      GROUP_CONCAT(c.userid ORDER BY c.userid ASC SEPARATOR ',') as Buyer, 
      bookname, 
      book_explain, 
      writedate 
     FROM campus_bookinfo cb 
LEFT JOIN user_books ub ON idx_campus_bookinfo = id_product 
LEFT JOIN customer c ON ub.id_customer = c.id_customer 
    WHERE cb.idx_campus = 1 
     AND cb.idxuser = 29 
GROUP BY idx_campus_bookinfo, bookname, book_explain, writedate 
ORDER BY writedate DESC 
+0

...看来你打我吧;) – 2009-12-09 01:54:04

+0

漂亮的一个主..这是我需要的..谢谢了一堆 – Treby 2009-12-09 01:54:59

+0

一个后续问题,我可以排序的用户ID? – Treby 2009-12-09 02:12:25

2

GROUP_CONCAT将你的用户ID和将它们连接起来。尝试一下。

SELECT idx_campus_bookinfo, 
     GROUP_CONCAT(c.userid) as Buyer, bookname, book_explain, writedate 
FROM campus_bookinfo cb 
LEFT JOIN user_books ub ON idx_campus_bookinfo = id_product 
LEFT JOIN customer c ON ub.id_customer = c.id_customer 
WHERE cb.idx_campus = 1 and cb.idxuser = 29 
GROUP BY idx_campus_bookinfo 
ORDER BY writedate DESC 
+0

那'GROUP BY'是MySQL支持的,但它与OP的查询不一样。 – 2009-12-09 01:54:40

+0

我喜欢你的代码,因为它短得多,但第一个权利,第一次服务.. 谢谢无论如何希望从这里再次从你这里... ... – Treby 2009-12-09 02:04:46