#mysql
#mysql
Вопрос:
У меня есть база данных с примерно 200 категориями, однако они не классифицированы должным образом.
Возьмем в качестве примера следующее:
prod_id | prod_cat | pc_code |
---|---|---|
1 | 101 моющее средство для посудомоечной машины | 1 |
2 | 102 стиральный порошок | 2 |
3 | 501 одноразовые подгузники | 5 |
4 | 502 одноразовые подгузники | 5 |
Я не могу сгруппировать их по коду pc_code, так как на самом деле они представляют собой 2 подкатегории (по крайней мере) на код pc_code.
Я хотел бы сгруппировать их по «моющим средствам» или «подгузникам» (их 197), и я не могу или предпочел бы этого не делать:
SELECT prod_cat FROM markets.products WHERE pc_code = 1 GROUP BY pc_code ORDER BY pc_code;
для каждой из 197 категорий. Хотя я знаю, что если бы я реализовал цикл for, например, в R, я мог бы получить группу для каждой категории.
Однако я подумал, что было бы чище разделить поле prod_cat на:
prod_id | прод_кат_но | prod_sub_cat | prod_cat | pc_code |
---|---|---|---|---|
1 | 101 | посудомойка | моющее средство | 1 |
2 | 102 | прачечная | моющее средство | 2 |
3 | 501 | расходный материал | подгузники | 5 |
4 | 502 | одноразовый | подгузники | 5 |
И сгруппировать по prod_cat. Поэтому я хотел бы разделить столбец посередине на три столбца, используя пробелы, но я понятия не имею, как это сделать.
Заранее большое вам спасибо.
Комментарии:
1. Воспользуйся
SUBSTRING_INDEX(SUBSTRING_INDEX(value, ' ', number), ' ', -1)
. Для первого числового значения вы можете использовать простоеvalue 0
.2.Я хотел бы сгруппировать их по «моющему средству» или «подгузникам»
WHERE SUBSTRING_INDEX(prod_cat, ' ', -1) IN ('detergent', 'diapers')
. И группировать по prod_catGROUP BY SUBSTRING_INDEX(prod_cat, ' ', -1)
Ответ №1:
попробуйте это, может вам помочь!
SELECT prod_cat FROM markets.products GROUP BY product_cat CONTAINS 'detergent' AND GROUP BY product_cat CONTAINS 'diapers'
Комментарии:
1. Не пытайтесь изобрести свой собственный синтаксис — сервер откажется его понимать.