2009-12-09 3 views
1

я этот кодMySQL Query: Оптимальное Запросы

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 с GROUP 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 

на вопрос последующую, может я сортировать идентификатор пользователя?

Да, вы можете:

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

... Кажется, ты меня опередил;) –

+0

хороший один хозяин .. это то, что мне нужно .. спасибо кучу – Treby

+0

Followup вопрос, могу ли я сортировать идентификатор пользователя? – Treby

2

GROUP_CONCAT будет принимать ваши идентификаторы пользователей и объединить их. Попробуйте это.

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. –

+0

Мне нравится ваш код , coz его намного короче, но сначала вправо, сначала подавайте .. Спасибо в любом случае надеюсь, что здесь от вас обоих снова ... – Treby

Смежные вопросы