2015-09-14 3 views
1
id | category 
001 | 1000 
001 | 300 
002 | 500 
003 | 200;300;100 
004 | 100;300 
005 | 200;3000 

Результат должен бытьКак подсчитать повторяющиеся данные в MySQL

Category | Total 
1000  | 1 
300  | 3 
500  | 1 
200  | 2 
100  | 2 

Как я могу прийти на этот результат? Я увидел что-то, что мне нужно использовать find_in_set, но для меня это сложно.

Любая помощь на этом будет принята с благодарностью!

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

Спасибо!

+2

Это будет довольно сложно так как у вас есть некоторые ';' разделенные данные. Нормализация определенно поможет. –

+0

@AbhikChakraborty - да, я знаю, но для нормализации может потребоваться некоторое время :(Я думал об этом решении, но если я могу сделать это с помощью запроса, было бы очень полезно :) – PinoyStackOverflower

+0

Оформить заказ на это решение http: //stackoverflow.com/questions/26215324/mysql-php-select-count-of-distinct-values-from-comma-separated-data-tags –

ответ

1

Хорошо. моя работа над предыдущим ответом! Ниже приведен способ разделения строки на разделитель в MySQL без использования хранимой процедуры.

Чтобы использовать этот метод, вам сначала понадобится иметь другую таблицу с номерами от 1 до любого количества вариантов, которые могут хранить каждая строка. Эта таблица будет использоваться в соединении, так что первый выбор будет соединен с строкой с номером 1, вторым выбором для строки 2 и т. Д. Таким образом, вам понадобится таблица, подобная этой: id ...

Допустим, ваш главный стол называется maintable с колонке категории, и ваша вторая таблица называется othertable со столбцом идентификаторов (хотя вы можете использовать любую таблицу, в которой последовательные номера или идентификационные номера).

этого я использовал для создания таблицы для этого exampe:

CREATE TABLE maintable (id INT, category VARCHAR(255)); 
    INSERT INTO maintable VALUES (1, '1000'), (2, '300'), (3, '500'), 4, '200;300;100'), (4, '100;300'), (4, '200;3000'); 
    CREATE TABLE othertable (id INT); 
    INSERT INTO othertable VALUES (1), (2), (3), (4), (5), (6), (7), (8); 

это MySQL код:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(maintable.category,';',othertable.id),';',-1) AS category, 
COUNT(*) AS numtimes 
    FROM maintable INNER JOIN othertable ON 
(LENGTH(category)>0 AND SUBSTRING_INDEX(SUBSTRING_INDEX(category,';',othertable.id),';',-1) 
<> SUBSTRING_INDEX(SUBSTRING_INDEX(category,';',othertable.id-1),';', -1)) 
    GROUP BY category ORDER BY category; 

и я получил эту resoult:

category numtimes 
    100  2 
    1000 1 
    200  3 
    200  2 
    300  1 
    500  1 
Смежные вопросы