Я делаю простой браузер изображений, который подключен к базе данных SQLite.В браузере похожие изображения сгруппированы в событие , а каждое изображение помечено несколькими тегами .
Чтобы отразить эту информацию, структура таблицы (все в одной таблице) выглядит примерно так:
row_id tag image_id event_id
1 computer 201 1
2 desk 201 1
3 chair 201 1
4 computer 202 1
5 coffee 202 1
6 desk 202 1
7 dog 203 2
8 phone 203 2
etc. etc. etc. etc. // many 1000's
В принципе, идея заключается в том, что пользователь может искать любое количество тегов (например,письменный стол, стул и ноутбук) и получите обратно ранжированный список идентификаторов событий.Каждое событие должно быть ранжировано по количеству изображений в событии, содержащем все теги, затем все теги минус 1, затем все теги минус 2 и т. Д.
Цель состоит в том, чтобы получить запрос, который возвращает информациюкак пример ниже, который я могу потом отсортировать.(Очевидно, что длина строк будет варьироваться в зависимости от того, сколько тегов ищется.)
event_id | event_size | no. imgs with 3 tags | no. imgs with 2 tags | no. imgs with 1 tag
2 74 6 24 55
5 20 2 4 14
3 36 4 11 22
Возможно ли это?Размер события - это просто количество уникальных идентификаторов изображений, которые оно содержит.В остальном, я думал, что с помощью некоторой комбинации ...
SUM(CASE WHEN tag = 'computer' THEN 1 ELSE 0 END)
... можно ли этого достичь?Я новичок в этом, поэтому не уверен, насколько это сложный вопрос.