Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
2 / 2 / 2
Регистрация: 03.12.2013
Сообщений: 26
1

Вывод уникальных записей с таблицы и суммирование дублированых записей с выводом колличества

14.12.2013, 21:09. Показов 1462. Ответов 13
Метки нет (Все метки)

Доброго времени суток форумчане!

Не получается фильтровать записи при выводе с таблицы MYSQL. Нужно вывести уникальные модели и суммировать их колличество. Пробовал Disctinct-om и SUM не получилось. Пожалуйста помогите.
Надеюсь на вашу помощь. Буду благодарен ссылкам.

вот мой код.

SQL
1
2
3
4
5
6
7
SELECT tov.id, cat.category_name, proiz.proizvod_name, mo.model_name, tov.kolichestvo
FROM tovar tov, category cat, proizvoditel proiz, model mo
WHERE tov.cat_id = cat.id
AND tov.proiz_id = proiz.id
AND tov.model_id = mo.id
ORDER BY cat.category_name
LIMIT 0 , 30

а это результат запроса на данный момент. нужно вывести моделей с общим колличеством. Пробовал все примеры с инета не получилось. Спасибо. Рисунок во вложеном файле.
Миниатюры
Вывод уникальных записей с таблицы и суммирование дублированых записей с выводом колличества  
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2013, 21:09
Ответы с готовыми решениями:

Вывод уникальных записей из таблицы
Доброго времени суток. Только начал осваивать написание макросов. Сразу в голове возникла...

Суммирование уникальных записей MYSQL
Вообщем такой вопрос, уже долго мучаюсь, т.к. плох в mysql задача такая: есть таблица, в ней...

Выборка из БД уникальных записей по нескольким столбцам и суммирование их значений
Здравствуйте! MS SQL Server 2014. Помогите составить запрос "Номенклатурный перечень...

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

13
Иллюзионист
153 / 152 / 27
Регистрация: 02.10.2013
Сообщений: 330
14.12.2013, 23:11 2
Не очень понятно, что суммировать нужно. Показать кол-во уникальных моделей в каталоге (то бишь, кол-во строк в выводе)? Так это надо делать отдельным запросом, а лучше самому считать строки в ответе и потом дописывать к таблице
Если я неправильно понял задачу, то, возможно, поможет GROUP BY. Он как раз позволяет посчитать что-то для сгруппированных записей
1
2 / 2 / 2
Регистрация: 03.12.2013
Сообщений: 26
15.12.2013, 20:49  [ТС] 3
Суммировать нужно данные с поля "kollichestvo". Допустим есть две одинаковые записи где поля 'kollichestvo' отличаются. Нужно вывести в результате одну запись и просуммировать их значения с поля количество.
1
Иллюзионист
153 / 152 / 27
Регистрация: 02.10.2013
Сообщений: 330
15.12.2013, 21:07 4
Как могут быть одинаковые записи? Имя модели не уникально?
Т.е. в таблице может быть:
3 | Ноутбуки | Toshiba | L255u | 5
4 | Ноутбуки | Toshiba | L255u | 3
5 | Ноутбуки | Toshiba | L255u | 8
Так?

Тогда не столбец `tov`.`kolichestvo`, а SUM(`tov`.`kolichestvo`)
и GROUP BY `mo.model_name`

И непонятно, как тогда выводить id моделей, если "лишние" "съедает" группировка
1
112 / 93 / 15
Регистрация: 03.10.2012
Сообщений: 315
16.12.2013, 11:50 5
Покажите структуру таблиц, с которых вы выбираете данные.
1
217 / 157 / 30
Регистрация: 11.05.2010
Сообщений: 614
16.12.2013, 14:11 6
Согласен с тем, что нужно показать структуру таблиц.
В общем случае это выглядит примерно так:
Tovar | SomeField
tov1 | 1
tov1 | 2
tov2 | 1
tov2 | 2
tov2 | 3
tov3 | 1
SQL
1
2
3
SELECT Tovar, COUNT (SomeField) AS TovCount
FROM TableName
GROUP BY Tovar
результат:
Tovar | TovCount
tov1 | 2
tov2 | 3
tov1 | 1

--
зы: почитай про GROUP BY, аналогичных примеров полно.
1
112 / 93 / 15
Регистрация: 03.10.2012
Сообщений: 315
16.12.2013, 17:02 7
Тут 4 таблицы нужно join'ить. Пусть ТС покажет структуру таблиц.
1
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 2
19.12.2013, 07:37 8
Дико извиняюсь за столь поздний ответ, не было возможности по скорей ответить. Сейчас вложу скрины таблиц.
0
0 / 0 / 0
Регистрация: 19.12.2013
Сообщений: 2
19.12.2013, 07:48 9
Вот структура таблиц.
Миниатюры
Вывод уникальных записей с таблицы и суммирование дублированых записей с выводом колличества   Вывод уникальных записей с таблицы и суммирование дублированых записей с выводом колличества   Вывод уникальных записей с таблицы и суммирование дублированых записей с выводом колличества  

Вывод уникальных записей с таблицы и суммирование дублированых записей с выводом колличества   Вывод уникальных записей с таблицы и суммирование дублированых записей с выводом колличества   Вывод уникальных записей с таблицы и суммирование дублированых записей с выводом колличества  

Вывод уникальных записей с таблицы и суммирование дублированых записей с выводом колличества  
0
112 / 93 / 15
Регистрация: 03.10.2012
Сообщений: 315
19.12.2013, 15:29 10
Допустим, у вас таблица со скриншота №7 называется stock.
SQL
1
2
3
4
5
6
7
8
9
10
SELECT
c.category_name,
p.proizvod_name,
m.model_name,
SUM(s.kolichestvo)
FROM stock s
JOIN category c ON c.id = s.cat_id
JOIN proizvod p ON p.id = s.proiz_id
JOIN model m ON m.id = s.model_id
GROUP BY s.model_id
1
2 / 2 / 2
Регистрация: 03.12.2013
Сообщений: 26
20.12.2013, 12:00  [ТС] 11
Цитата Сообщение от r3ntg3n Посмотреть сообщение
Допустим, у вас таблица со скриншота №7 называется stock.
Код SQL
1
2
3
4
5
6
7
8
9
10
SELECT
c.category_name,
p.proizvod_name,
m.model_name,
SUM(s.kolichestvo)
FROM stock s
JOIN category c ON c.id = s.cat_id
JOIN proizvod p ON p.id = s.proiz_id
JOIN model m ON m.id = s.model_id
GROUP BY s.model_id

Если честно не понял...=(

Добавлено через 34 секунды
7 Таблица у меня называется tovar

Добавлено через 16 секунд
7 Таблица у меня называется tovar
0
112 / 93 / 15
Регистрация: 03.10.2012
Сообщений: 315
20.12.2013, 12:07 12
Выложите полный дамп таблиц с данными.
1
2 / 2 / 2
Регистрация: 03.12.2013
Сообщений: 26
20.12.2013, 13:26  [ТС] 13
во вложении дамп с таблицами
Вложения
Тип файла: rar zadachka.rar (1.3 Кб, 4 просмотров)
0
112 / 93 / 15
Регистрация: 03.10.2012
Сообщений: 315
20.12.2013, 15:51 14
SQL
1
2
3
4
5
6
7
8
9
10
SELECT
    c.category_name,
    p.proizvod_name,
    m.model_name,
    SUM(t.kolichestvo) stock
FROM tovar t
LEFT JOIN category c ON t.cat_id = c.id
LEFT JOIN proizvoditel p ON t.proiz_id = p.id
LEFT JOIN model m ON t.model_id = m.id
GROUP BY t.model_id;
Результат:
Код
+----------------------+---------------+--------------+-------+
| category_name        | proizvod_name | model_name   | stock |
+----------------------+---------------+--------------+-------+
| Ноутбуки             | Toshiba       | L255u        |     5 |
| Телефоны             | Nokia         | Asha 308     |    12 |
| Телефоны             | Samsung       | Galaxy S II  |     3 |
| Телефоны             | Samsung       | Galaxy S III |     5 |
| Телевизоры           | Supra         | LEDO 21'     |     5 |
+----------------------+---------------+--------------+-------+
5 rows in set (0.00 sec)
Но тут надо посмотреть на EXPLAIN:
Код
mysql> EXPLAIN SELECT c.category_name, p.proizvod_name, m.model_name, SUM(t.kolichestvo) stock FROM tovar t LEFT JOIN category c ON t.cat_id = c.id LEFT JOIN proizvoditel p ON t.proiz_id = p.id LEFT JOIN model m ON t.model_id = m.id GROUP BY t.model_id;
+----+-------------+-------+--------+---------------+---------+---------+-----------------------+------+---------------------------------+
| id | select_type | table | type   | possible_keys | key     | key_len | ref                   | rows | Extra                           |
+----+-------------+-------+--------+---------------+---------+---------+-----------------------+------+---------------------------------+
|  1 | SIMPLE      | t     | ALL    | NULL          | NULL    | NULL    | NULL                  |    6 | Using temporary; Using filesort |
|  1 | SIMPLE      | c     | eq_ref | PRIMARY       | PRIMARY | 4       | cyberforum.t.cat_id   |    1 |                                 |
|  1 | SIMPLE      | p     | eq_ref | PRIMARY       | PRIMARY | 4       | cyberforum.t.proiz_id |    1 |                                 |
|  1 | SIMPLE      | m     | eq_ref | PRIMARY       | PRIMARY | 4       | cyberforum.t.model_id |    1 |                                 |
+----+-------------+-------+--------+---------------+---------+---------+-----------------------+------+---------------------------------+
4 rows in set (0.00 sec)
А именно вот это Using temporary; Using filesort в последнем столбце первой строки. Если испольщование времянки еще так себе, то filesort не годится

По этому запрос должен быть таким
SQL
1
2
3
4
5
6
7
8
9
10
11
SELECT
    c.category_name,
    p.proizvod_name,
    m.model_name,
    SUM(t.kolichestvo) stock
FROM tovar t
LEFT JOIN category c ON t.cat_id = c.id
LEFT JOIN proizvoditel p ON t.proiz_id = p.id
LEFT JOIN model m ON t.model_id = m.id
GROUP BY t.model_id
ORDER BY NULL;
Результат тот же:
Код
+----------------------+---------------+--------------+-------+
| category_name        | proizvod_name | model_name   | stock |
+----------------------+---------------+--------------+-------+
| Телефоны             | Nokia         | Asha 308     |    12 |
| Телефоны             | Samsung       | Galaxy S II  |     3 |
| Ноутбуки             | Toshiba       | L255u        |     5 |
| Телевизоры           | Supra         | LEDO 21'     |     5 |
| Телефоны             | Samsung       | Galaxy S III |     5 |
+----------------------+---------------+--------------+-------+
А вот EXPLAIN по-лучше:
Код
mysql> EXPLAIN SELECT c.category_name, p.proizvod_name, m.model_name, SUM(t.kolichestvo) stock FROM tovar t LEFT JOIN category c ON t.cat_id = c.id LEFT JOIN proizvoditel p ON t.proiz_id = p.id LEFT JOIN model m ON t.model_id = m.id GROUP BY t.model_id ORDER BY null;
+----+-------------+-------+--------+---------------+---------+---------+-----------------------+------+-----------------+
| id | select_type | table | type   | possible_keys | key     | key_len | ref                   | rows | Extra           |
+----+-------------+-------+--------+---------------+---------+---------+-----------------------+------+-----------------+
|  1 | SIMPLE      | t     | ALL    | NULL          | NULL    | NULL    | NULL                  |    6 | Using temporary |
|  1 | SIMPLE      | c     | eq_ref | PRIMARY       | PRIMARY | 4       | cyberforum.t.cat_id   |    1 |                 |
|  1 | SIMPLE      | p     | eq_ref | PRIMARY       | PRIMARY | 4       | cyberforum.t.proiz_id |    1 |                 |
|  1 | SIMPLE      | m     | eq_ref | PRIMARY       | PRIMARY | 4       | cyberforum.t.model_id |    1 |                 |
+----+-------------+-------+--------+---------------+---------+---------+-----------------------+------+-----------------+
4 rows in set (0.00 sec)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2013, 15:51

Вывод уникальных записей
Доброе время суток. есть таблица в не данные: col1-col2-col3---col4...

Вывод уникальных записей из БД
Доброго времени суток! Есть такой запрос (максимально упростил его для понимания) SELECT DISTINCT...

Вывод уникальных записей из поля в DBComboBox
Здравствуйте, нужно вывести уникальные записи из поля в DBComboBox. Имеем: - 1 ComboBox; - 1...

Триггер на подсчет колличества записей
Всем здрасте. В колледже дали задание: С помощью триггера, реализовать автоматический подсчет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.