2009-10-11 2 views
-3

Я бы хотел, чтобы выбрать количество вновь добавленный DISTINCT product_id в таблицеПомощи другого MySQL Query

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
а -1
летучей -2
люди -2

* заранее спасибо
* EDIT
У меня есть таблица для хранения изображений продуктов, я продолжаю добавлять новые изображения продуктов в этой таблице, и я хочу, чтобы выбрать количество вновь добавляемых изображений этого конкретного продукта (не обращая внимания на предыдущие наборы фотографии, добавленные ранее в таблице) ... Я надеюсь, что я ясно

* EDIT Я нашел ответ на мой вопрос ..

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 
+0

Ваш вопрос непонятен, как вы определяете «недавно добавленный»? –

+0

Вы хотите перейти от нового к старому, и, увидев первую строку, посмотрите, сколько раз за ней следует одна и та же строка? – Zed

+0

Вы потратили достаточно времени на этот сайт, чтобы хотя бы попытаться задать вопросы с полной информацией. – random

ответ

0
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

Вы можете перестроить таблицу, чтобы также иметь счетчик:

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 
+0

Я тоже это сделал, но если вы посмотрите на его данные , он считает только «высшие» иды. –

+0

Я отредактировал сообщение, чтобы сделать себя более понятным ... Пожалуйста, см. Таблицу примеров и результат – halocursed

+0

Спасибо Zed, но я нашел ответ на свой вопрос, не меняя таблицу ... – halocursed

1

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

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

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

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

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

+0

У меня есть поле date_added в table ... Что такое filterDate? – halocursed

Смежные вопросы