Хорошо. моя работа над предыдущим ответом! Ниже приведен способ разделения строки на разделитель в 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
Это будет довольно сложно так как у вас есть некоторые ';' разделенные данные. Нормализация определенно поможет. –
@AbhikChakraborty - да, я знаю, но для нормализации может потребоваться некоторое время :(Я думал об этом решении, но если я могу сделать это с помощью запроса, было бы очень полезно :) – PinoyStackOverflower
Оформить заказ на это решение http: //stackoverflow.com/questions/26215324/mysql-php-select-count-of-distinct-values-from-comma-separated-data-tags –