【发布时间】:2020-06-15 21:50:53
【问题描述】:
好的,这有点难以解释,而且标题不是最好的:/ 但是,基本上,我有 3 个表,我正在尝试编写一个查询,以 2 级排序返回它们。第一个是每行具有的“标签”数量,第二个是该行的创建时间。
Table1: Items
* ID
* Name
* CreatedAt
Table2: Tags
* ID
* Name
Table3: TaggedItems
* TagID
* ItemID
我想按创建时的升序列出所有具有 1 个或多个标签的项目。但是,这就是我遇到问题的地方,我希望排序基于与项目匹配的标签数量,并在该排序中应用升序标准。
所以,假设我有:
Item1 -> CreatedAt(0), Tags(A, B)
Item2 -> CreatedAt(0), Tags(A)
Item3 -> CreatedAt(1), Tags(B)
Item4 -> CreatedAt(1), Tags(A, B)
然后搜索带有标签 A 和 B 的所有项目必须首先返回 Item1 和 Item4 并按升序排列 CreatedAt。然后Item2 和Item3 并按CreatedAt 升序排列。所以结果是:
* Item1
* Item4
* Item2
* Item3
我对 SQL 缺乏经验,所以如果我解释正确的话,也许有众所周知的解决方案?
感谢任何帮助!
【问题讨论】:
标签: sql postgresql tags