У меня есть две таблицы в первом столе, «элементы», хранятся предметы с ценами:MySQL сумма несколько дублированных строк
id price
1 40
2 55
3 70
Во второй таблице, «наборы», сохраненные наборы элементов и элементы, содержащиеся в наборе, хранящемся как список, разделенный запятой:
id items
1 1,2,3
2 2,2,3,3
3 1,2,1,2
Мне нужно получить общую стоимость комплектов.
SELECT id, (
SELECT SUM(price)
FROM `items` AS i
WHERE i.id IN (s.items)
) AS total_price
FROM `sets` AS s
Но если в «s.items» существует дубликаты, сумма ошибочна.
P.S. Извините за мой английский.
Вы должны исправить свой формат данных, поэтому у вас есть таблица правильного соединения (а строка для каждого элемента и идентификатор). Хранение числовых идентификаторов в строковых списках - очень плохая структура данных. Кроме того, ваш запрос в любом случае неверен. –
Гордон прав. Я настоятельно рекомендую вам не принимать какие-либо ответы и сначала фиксировать способ создания базы данных. То, что у вас здесь, является отношением «многие ко многим», и оно решается с помощью таблицы соединения/соединения. Почитайте о взаимоотношениях «многие-ко-многим», поскольку вы найдете их относительно обычными и правильно построите свою базу данных, что сэкономит вам много головных болей. – Alternatex
Я хотел бы реструктурировать базу данных, но я не могу. Мне нужно получить общую сумму по текущей структуре. –