【发布时间】:2012-03-30 05:45:29
【问题描述】:
我有一个书籍数据库,其中包含与书籍相关的类别和标签。我正在尝试构建一个过滤器,让用户可以过滤多个类别或标签,并查看具有这些标签或类别的书籍。它适用于单个类别或标签,但如果由于按图书 ID 分组而存在多个标签或类别,它就会崩溃。
SELECT books.id as id,title, sub_title,medium_image_url,
amzn_url,amzn_review as review,SUBSTRING(kindle_price,2) as price,
IFNULL(ROUND(combined_ratings.love/(combined_ratings.love+combined_ratings.hate)*100), 0) AS rating ,
categories.category as category,GROUP_CONCAT(DISTINCT categories.id SEPARATOR ", ") as all_cats
FROM books
JOIN combined_ratings ON books.id = combined_ratings.book_id JOIN book_categories ON books.id = book_categories.book_id
JOIN categories ON book_categories.category_id = categories.id
WHERE (SUBSTRING(kindle_price,2) >= 0
AND SUBSTRING(kindle_price,2) <= 12
AND kindle_price <> "")
AND (IFNULL(ROUND(combined_ratings.love/(combined_ratings.love+combined_ratings.hate)*100), 0) >= 0
AND IFNULL(ROUND(combined_ratings.love/(combined_ratings.love+combined_ratings.hate)*100), 0) <= 100)
GROUP BY id
ORDER BY price ASC, rating DESC
我尝试过使用 GROUP_CONCAT 和 HAVING,我刚刚阅读了有关 IN() 的信息,但我尝试过,但它不起作用。我现在真正需要做的就是对其执行 IN() 之类的操作,有什么建议吗?
编辑:我使用它并且能够获得单个类别的结果,但它只能工作一次...... 这行得通...
AND FIND_IN_SET( categories.id, '6' ) > 0
这不是
AND FIND_IN_SET( categories.id, '6' ) > 0 AND FIND_IN_SET( categories.id, '5' ) > 0
如果我可以让它工作,它就解决了我的问题。
【问题讨论】:
标签: mysql