Use the GROUP_CONCAT function, but it means having to replace DISTINCT with a 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
a followup question, can i sort the userid?
Yes, you can:
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