当前位置: 首页 > 知识库问答 >
问题:

从一个类别中选择除属于其他类别的图书以外的所有图书

屠锐
2023-03-14

我有3个表:books,book_categories,categories

book_categories表“联接”bookscategories。它包含列:idbook_idcategory_id

所以一本书可能属于很多类别,一个类别可能有很多本书。

我需要从given_category检索除属于given_set_of_category的书籍以外的所有书籍的查询。例如,我想要A类中的所有书籍,但前提是它们不属于B类或C类。我还需要按book.inserted列对结果进行排序。

我知道如何使用2个联接从given_category中获取所有书籍,但不知道如何在结果中从其他类别中排除一些书籍。我无法在PHP中过滤书籍,因为我正在对搜索结果进行分页。

共有2个答案

纪鸿禧
2023-03-14

所以,如果你的意思是它属于一个类别,而不属于其他类别:

AND EXISTS(SELECT * FROM books b JOIN book_categories bc ON b.id = bc.book_id JOIN categories c ON bc.category_id = c.id AND c.id = 'A')
AND NOT EXISTS(SELECT * FROM books b JOIN book_categories bc ON b.id = bc.book_id JOIN categories c ON bc.category_id = c.id AND c.id != 'A')
鱼志学
2023-03-14
where
  category_id = <given category>
  and books.book_id not in
(
 select book_id from book_categories
  where category_id in (<given set of cat>)
)
order by books.inserted
 类似资料:
  • 我正在尝试建立自己的Webshop。 我有两个表-products和categories。结构是这样的: 当用户点击main category时,我选择要显示的产品如下所示: 问题是,我希望当用户单击主类别时,也可以选择其子类别中的所有产品。例如,类别是类别的子类别,在db中类似于 如您所见,我的当前选择将不会选择或,因为用户正在查看具有的类别...如何修改我的选择,使它将显示所有产品从主类别的子

  • 问题内容: 我非常感谢您为我的问题提供的一些帮助: 我有2个MySQL表,类别和帖子,它们的布局(简化)如下: 类别 : CATID-名称-parent_id 帖子 : PID-名称-类别 我想做的是获取每个类别的帖子总数,包括子类别中的所有帖子。 现在,我通过执行以下操作来获取每个(顶级)类别(而不是子类别)中的帖子总数: 再次的问题是,如何获得每个类别的总计,包括每个相关子类别的总计? 由于我

  • 我有两个表的项目和类别。类别表是自联接表。 项目表具有以下列ID、项目名称、类别ID Categories表包含以下列CATID、category\u name、parent\u ID 我需要选择在一个类别和这个主类别的子类别下列出但不起作用的项目。这里是mysql,它只返回sub。

  • 问题内容: 我正在编写类似于博客软件的Web应用程序。有以下三个表 我很难概念化SQL查询,该查询将返回在给定集中具有“所有”标签的帖子。 问题答案: 这是关系划分。 使用和或加倍。 第一种方法的一个例子是。

  • 三个表保存文章信息: 类别表: lft:左值 rgt:正确的值 lft和rgt值为嵌套集,例如: 文章表: 物品类别地图表: 如何在MySQL中从一个类别和子类别中选择所有文章? 我期望: 1、 单击cat2时,显示cat2和cat5以及cat6和cat7的所有项目。 2、 单击cat5时,仅显示cat5的所有项目。 3、点击root时,显示所有类别的所有文章(包括cat1、cat2、cat3、c

  • 我在书店网站上有三张桌子。类别、子类别和书籍我想在将数据插入图书表时选择类别和相关子类别,但子类别无法从类别中获取id,并且在列表中未显示任何子类别我的代码如下: