Forum Webscript.Ru

Программирование => PHP => Тема начата: andy5555 от 08 Февраля 2009, 02:01:31

Название: Помагите с запросом
Отправлено: andy5555 от 08 Февраля 2009, 02:01:31
существует две таблицы в mysql
1:
Nomer_Kategorie | Name
1                         Avto
2                         Produkty
3                         Apteka


и вторая
Summa | nommer_kategorie
225    1
45      3
34      1
6        2
56      1

помогите с запросом к базе
мне нужно вывод суммы закупок по категориям по возростанию
например:
Avto       265р
Apteka    45р
Produkty  6р
Название: Помагите с запросом
Отправлено: zuko от 08 Февраля 2009, 19:09:58
Т.к. вы не дали названия таблиц, то назовем первую таблицу table1, а вторую - table2. Тогда все необходимое вам получаем одним запросом:

SELECT table1.Name, table2.Summa
FROM table1, table2
WHERE table1.Nomer_Kategorie = table2.nomer_kategorie
ORDER BY table2.Summa DESC
Название: Помагите с запросом
Отправлено: andy5555 от 08 Февраля 2009, 21:37:27
да, спасибо, но запрос не считает суммы,
например в одной категории было несколько закупок он их не считает а выводит по отдельности
Название: Помагите с запросом
Отправлено: zuko от 09 Февраля 2009, 00:30:31
Сорри, не внимательно читал вопрос.
Попробуй так:

SELECT table1.Name, SUM(table2.Summa) as Summ
FROM table1, table2
WHERE table1.Nomer_Kategorie = table2.nomer_kategorie
GROUP BY table2.nomer_kategorie
ORDER BY Summ DESC

Я неуверен, правильно ли здесь будет сортировка работать, т.к. GROUP BY тоже сортирует по указанному в нем полю
Название: Помагите с запросом
Отправлено: andy5555 от 09 Февраля 2009, 01:10:25
ты супер!
спасибо огромнейшее!!!
Название: Помагите с запросом
Отправлено: zuko от 09 Февраля 2009, 13:12:02
замечание по 2-й таблице:
желательно добавить уникальное ключевое поле. иначе вы столкнетесь с проблемой при удалении, поиску или изменении необходимой строки
в любом из этих оперций есть условие WHERE, в котором вы указываете, какую строку изменять.
если указать:
WHERE Summa=6, то запрос зацепит не только 4-ю строку, а и все остальные, где сумма будет равна 6
WHERE nommer_kategorie=1 зацепит уже в данном случае 3 строки

добавьте в самом начале поле id:
ALTER TABLE `table2` ADD `id` INT NOT NULL FIRST ;
сделайте его ключевым:
ALTER TABLE `table2` ADD PRIMARY KEY ( `id` ) ;
и сделайте его автоинкрементным (номер id будет назначаться сам, на 1 больше от предыдущего):
ALTER TABLE `table2` CHANGE `id` `id` INT( 11 ) NOT NULL AUTO_INCREMENT
Название: Помагите с запросом
Отправлено: andy5555 от 09 Февраля 2009, 14:00:28
да так у меня и есть, просто здесь я не стал расписывать всю таблицу,
а запрос этот делал я для графика, хочу потом привезать его к Flash, вернее флэш к пхп, всё-таки на флэше по красивей будет чем графика, ну мне так кажется.

Если чесно признаться то я так и не понял за счет чего произошла сортировка.
И если по алфавиту отсортировать, как это происходит, может по этому есть какой-нить хэлп?
Название: Помагите с запросом
Отправлено: zuko от 09 Февраля 2009, 14:38:27
ORDER BY Summ DESC

ORDER BY - сортировка
Summ - поле, по которому необходимо сортировать
DESC - по убыванию

Цитировать
andy5555:
есть какой-нить хэлп?

поищи книгу "Понимание SQL"
вроде
здесь (http://www.kodges.ru/14151-ponimanie-sql.html) можно скачать, а здесь (http://www.sql.ru/docs/sql/u_sql/index.shtml) почитать в онлайне
Название: Помагите с запросом
Отправлено: maroccanez от 15 Февраля 2009, 14:58:48
Спасибо за ссылки, постараюсь обязательно.