我的应用程序实现带有标记的注解。在检索注解时,可以通过手动设置由附加表定义的顺序来对注解进行排序。例如,如果有两个注解,并且都用两个标记“featured”和“usable”标记,则它们的检索顺序由第三个表设置:order。
如果给两个注解分配了相同的两个标记(“featured”和“usiver”),则可以按标记名检索它们,并且它们的顺序在两个查询之间是不同的。
数据库的结构是:
Comment:
- id
- text
Tag:
- id
- name
CommentTag:
- id
- tag_id (refernces Tag.id)
- comment_id (references Comment.id)
Order:
- id
- comment_id (references Comment.id)
- tag_id (references Tag.id)
- order
以下查询用于检索注解:
SELECT comment.* FROM comment
INNER JOIN tag ON (comment.id = tag.comment_id)
INNER JOIN commenttag ON (tag.tag_id = commenttag.id)
LEFT OUTER JOIN order ON (comment.id = order.comment_id)
WHERE (
tag.name = "featured" AND
(tag.id = order.tag_id OR order.comment_id IS NULL))
ORDER BY order.order ASC
在某些情况下,查询会起一定作用。但是。。。分配给两个标记(“特色”和“有用”)但仅为单个标记(“有用”)设置了顺序的注解不会为第二个标记(“特色”)的查询返回。只有当两个标签都存在排序对象时,我才能让它工作。
注解表:
+----+----------------+
| id | text |
+----+----------------+
| 1 | first comment |
+----+----------------+
| 2 | second comment |
+----+----------------+
标记表:
+----+---------------+
| id | name |
+----+---------------+
| 11 | featured |
+----+---------------+
| 12 | useful |
+----+---------------+
commenttag表:
+----+---------------------+
| id | tag_id | comment_id |
+----+---------------------+
| 21 | 11 | 1 |
+----+---------------------+
| 22 | 11 | 2 |
+----+---------------------+
| 23 | 12 | 1 |
+----+---------------------+
| 24 | 12 | 2 |
+----+---------------------+
订单表:
+----+---------------------+-------+
| id | tag_id | comment_id | order |
+----+---------------------+-------+
| 23 | 12 | 1 | 6 |
+----+---------------------+-------+
| 24 | 12 | 2 | 3 |
+----+---------------------+-------+
我怎样才能检索评论而不在这里排序?
1条答案
按热度按时间tyg4sfes1#
我想你只是想了解
ON
子句而不是WHERE
条款: