Помогите с другим запросом MySQL - PullRequest
0 голосов
/ 11 октября 2009

Я хотел бы выбрать количество добавленных DISTINCT product_id в таблице

ID    product_id
 1      abc
 2      abc
 3      cat
 4      dog
 5      dog
 6      man
 7      man
 8      bat
 9      bat
10      abc
11      cat
12      dog
13      dog

Я хочу запрос, который дает мне аналогичный результат из приведенной выше таблицы -
собака -2
кот -1
abc -1
летучая мышь -2
человек -2

* Заранее спасибо
* РЕДАКТИРОВАТЬ
У меня есть таблица для хранения изображений продуктов, я продолжаю добавлять новые изображения продуктов в эту таблицу и хочу выбрать количество вновь добавленных изображений этого конкретного продукта (игнорируя предыдущие наборы изображений, добавленных ранее в таблицу). .. Надеюсь, я ясно дал понять

* РЕДАКТИРОВАТЬ Я нашел ответ на свой вопрос ..

SELECT COUNT(xbrygame_scrnsmkv.id) FROM xbrygame_scrnsmkv 
WHERE xbrygame_scrnsmkv.id >(SELECT  MAX(xbrygame_scrnsmkv.id) 
                             FROM xbrygame_scrnsmkv 
                             WHERE xbrygame_scrnsmkv.product_id= (SELECT  DISTINCT xbrygame_scrnsmkv.product_id 
                                                             FROM xbrygame_scrnsmkv 
                                                             ORDER BY xbrygame_scrnsmkv.id DESC LIMIT 5,1)) 
   GROUP BY xbrygame_scrnsmkv.product_id

Ответы [ 3 ]

3 голосов
/ 11 октября 2009

Вы можете изменить дизайн своего стола, чтобы он также имел счетчик:

ID    product_id  consecutive
 8      bat         1
 9      bat         2
10      abc         1
11      cat         1
12      dog         1
13      dog         2

При вставке в таблицу сначала проверьте последнюю запись и ее последовательный счетчик. Если вы вставляете тот же элемент, увеличьте счетчик, иначе вставьте 1. Что-то вроде:

INSERT INTO Table (product_id, consecutive) VALUES
('newProd', CASE (SELECT product_id FROM Table WHERE ID = MAX(ID))
              WHEN 'newProd' THEN
                           (SELECT consecutive FROM Table WHERE ID = MAX(ID)) + 1
              ELSE 1
            END);

Тогда вы можете сделать свой выбор как:

SELECT product_id, consecutive
FROM Table
WHERE ID IN
  (SELECT MAX(ID)
   FROM Table
   GROUP BY product_id)

Оригинальный ответ:

SELECT Filename, COUNT(Filename) as Count
FROM Table
GROUP BY Filename
1 голос
/ 11 октября 2009

Если вам нужны только «добавленные» записи, вам нужно будет как-то указать, что такое новая добавленная запись. Ваши базы данных могут поддерживать датирование по умолчанию во всех записях (у меня есть предположение, что Ingres может сделать это, но я, возможно, представляю себе это - это было давно, так как я использовал это), но вам, вероятно, нужно будет что-то добавить к Грести себя.

Вы можете добавить поле даты и времени для фильтрации, затем вы можете сделать то же, что и Zed:

SELECT Filename, COUNT(Filename) as Count
FROM Table
WHERE DateAdded > (FilterDate)
GROUP BY Filename

( EDIT , где FilterDate - это DateTime, после которого вы считаете, что запись является новой, например, вы можете установить ее на Now минус 60 минут - синтаксис будет меняться в зависимости от СУБД)

или вы можете добавить битовый столбец флага «новый» и установить для него значение «истина» для каждой новой записи; они отключают его после чтения или некоторого произвольного интервала.

0 голосов
/ 21 октября 2009
SELECT COUNT(xbrygame_scrnsmkv.id) FROM xbrygame_scrnsmkv 
WHERE xbrygame_scrnsmkv.id >(SELECT  MAX(xbrygame_scrnsmkv.id) 
                             FROM xbrygame_scrnsmkv 
                             WHERE xbrygame_scrnsmkv.product_id= (SELECT  DISTINCT xbrygame_scrnsmkv.product_id 
                                                             FROM xbrygame_scrnsmkv 
                                                             ORDER BY xbrygame_scrnsmkv.id DESC LIMIT 5,1)) 
   GROUP BY xbrygame_scrnsmkv.product_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...