Мое приложение реализует комментарии с тегами.При получении комментариев их можно упорядочить, задав вручную порядок, который определяется дополнительной таблицей.Например, если есть два комментария и оба помечены двумя тегами: «признакам» и «полезным», порядок их поиска определяется третьей таблицей: Порядок.
Если двум комментариям назначены одинаковые два тега («избранные» и «полезные»), их можно получить по имени тега, и их порядок будет различным для двух запросов.
Структурабаза данных:
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 |
+----+---------------------+-------+
Как получить комментарии без заказа здесь?