Подсчитать все элементы в «мусорном ведре» с запросом mysql - PullRequest
0 голосов
/ 14 сентября 2011

Информация:

У меня есть галерея с любым количеством альбомов, в каждом альбоме может быть любое количество изображений.

Поэтому у меня есть таблица «gallery_album» со всеми альбомами. У меня также есть таблица «gallery_item», которая содержит все элементы для каждого альбома.

Что я хочу сделать:

Я хочу, чтобы в качестве одного значения можно было определить, сколько элементов в корзине для мусора (альбомов и элементов).

Если альбом находится в корзине, все элементы также должны быть в корзине.

Я сделал следующее заявление, но мне все еще нужно каким-то образом получить счет SUM, чтобы он отображался в одном значении вместо одной строки на альбом. (Я не знаю, является ли это лучшим подходом, поэтому, пожалуйста, поправьте меня!)

(Когда статус -2, он зарегистрирован как находящийся в мусорном ведре. Я не хочу отмечать все элементы с -2 при пометке альбома с -2)

SELECT a.id, 
CASE a.status
  WHEN -2
  THEN (
    SELECT COUNT(*)
    FROM gallery_item i
    WHERE i.fk_album = a.id
  ) + 1
  ELSE (
    SELECT COUNT(*)
    FROM gallery_item i
    WHERE (i.fk_album = a.id) && (i.status = -2)
  )
END as cnt, a.status
FROM gallery_album a
GROUP BY a.id

Заранее спасибо!

1 Ответ

1 голос
/ 15 сентября 2011

Хорошо, немного поиграв, я решил это ... Но я все еще хотел бы знать, есть ли еще более умный способ?

Это мое решение:

SELECT SUM(albums_and_items.cnt)
FROM (
  SELECT
  CASE a.status
    WHEN -2
    THEN (
      SELECT COUNT(*)
      FROM gallery_item AS i
      WHERE i.fk_album = a.id
    ) + 1
    ELSE (
      SELECT COUNT(*)
      FROM gallery_item AS i
      WHERE (i.fk_album = a.id) && (i.status = -2)
    )
  END as cnt
  FROM gallery_album AS a
  GROUP BY a.id
) AS albums_and_items
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...