Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2012, 15:59   #1
HenryL
Пользователь
 
Регистрация: 09.06.2010
Сообщений: 24
По умолчанию Запрос к БД

Всем доброго времени суток!
Задание по учебе, вдруг начали работать с MS SQL Server, хотя толком не учили SQL, когда-то был Access и все. Так что вопросы нубские буду задавать

Итак, базу я типа сделал:


Теперь хочу посчитать выручку по сеансам. Пишу такой запрос:
PHP код:
SELECT        Фильмы.[Название фильма], Залы.Название AS [Название зала], SUM(Цены.Цена) AS ВыручкаМеста.Сектор
FROM            Билеты INNER JOIN
                         Места ON Билеты
.[Код места] = Места.[Код местаINNER JOIN
                         Сеансы ON Билеты
.[Код сеанса] = Сеансы.[Код сеансаINNER JOIN
                         Фильмы ON Сеансы
.[Код фильма] = Фильмы.[Код фильмаINNER JOIN
                         Залы ON Сеансы
.[Код зала] = Залы.[Код залаINNER JOIN
                         Цены ON Билеты
.[Код сеанса] = Цены.[Код сеанса] AND Места.Сектор Цены.Сектор
GROUP BY Фильмы
.[Название фильма], Залы.НазваниеЦены.ЦенаМеста.Сектор 
Возвращает он мне следующее:

Хотя проданных билетов у меня столько:

Что я не так делаю? База настолько ужасна?
HenryL вне форума Ответить с цитированием
Старый 12.11.2012, 16:19   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Не видно чего возвращено. В данном случае запросы для ACCESS и MSSQL идентичными будут и коль по сеансам, то зачем группировка по секторам и ценам? Сам запрос возможно таким должен быть (структура таблиц и их связи не приведены)
Код:
SELECT Фильмы.[Название фильма], Залы.Название AS [Название зала], SUM(Цены.Цена) AS Выручка
  FROM  Билеты
    INNER JOIN Места ON Билеты.[Код места] = Места.[Код места]
    INNER JOIN Сеансы ON Билеты.[Код сеанса] = Сеансы.[Код сеанса]
    INNER JOIN Фильмы ON Сеансы.[Код фильма] = Фильмы.[Код фильма]
    INNER JOIN Залы ON Сеансы.[Код зала] = Залы.[Код зала]
    INNER JOIN Цены ON Билеты.[Код сеанса] = Цены.[Код сеанса] AND Места.Сектор = Цены.Сектор
  GROUP BY Фильмы.[Название фильма], Залы.Название
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.11.2012, 16:50   #3
HenryL
Пользователь
 
Регистрация: 09.06.2010
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Не видно чего возвращено.
Скрины не отображаются? (я вставил через тег [IMG][/IMG])

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
SELECT Фильмы.[Название фильма], Залы.Название AS [Название зала], SUM(Цены.Цена) AS Выручка
  FROM  Билеты
    INNER JOIN Места ON Билеты.[Код места] = Места.[Код места]
    INNER JOIN Сеансы ON Билеты.[Код сеанса] = Сеансы.[Код сеанса]
    INNER JOIN Фильмы ON Сеансы.[Код фильма] = Фильмы.[Код фильма]
    INNER JOIN Залы ON Сеансы.[Код зала] = Залы.[Код зала]
    INNER JOIN Цены ON Билеты.[Код сеанса] = Цены.[Код сеанса] AND Места.Сектор = Цены.Сектор
  GROUP BY Фильмы.[Название фильма], Залы.Название
Работает! Но что-то я не понимаю, голова уже кругом едет. Проблема в следующем. Содержимое моей таблицы Билеты следующее:

А по запросу выводит вот так:

Куда-то пропадают остальные сеансы
Ничего не пойму... Если продаю билеты на сеанс 1 и 2, то их учитывает и выручка обновляется. А если продаю на сеансы 3 и 4, которые у меня тоже существуют, то ничего не меняется!

Последний раз редактировалось HenryL; 12.11.2012 в 16:53.
HenryL вне форума Ответить с цитированием
Старый 12.11.2012, 17:13   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Из данных одной таблицы не видно где и что потеряно. Где-то в связях между таблицами рассыпались ссылки или ссылки не на то
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.11.2012, 17:21   #5
HenryL
Пользователь
 
Регистрация: 09.06.2010
Сообщений: 24
По умолчанию

Я, конечно, могу выложить базу, но она у меня в .sdf
А в SQL Server Compact нет схемы данных, я ее делал в Visual Studio прямо (нужно сделать типа оболочки для работы с базой)... короче, бред полный, а не проект у меня...

Вбил в нормальную базу, там так же, выводит, но не все. Не могу сообразить теперь, как базу вытащить из папки и залить сюда
Вложения
Тип файла: rar MyDatabase#2.rar (6.1 Кб, 6 просмотров)

Последний раз редактировалось Stilet; 13.11.2012 в 18:00.
HenryL вне форума Ответить с цитированием
Старый 12.11.2012, 19:59   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Записей же не много в таблицах, можно содержимое таблиц или ручками показать здесь или картинки выложить. Лучше ручками, может когда будете данные указывать и сами заметите свою проблему, проверяя глазами корректность информации.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.11.2012, 16:21   #7
HenryL
Пользователь
 
Регистрация: 09.06.2010
Сообщений: 24
По умолчанию

Аватар, в архиве фото структур таблиц и данные в них, надеюсь, правильно понял
Вложения
Тип файла: rar 55.rar (196.1 Кб, 9 просмотров)
HenryL вне форума Ответить с цитированием
Старый 13.11.2012, 17:52   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

В Цены только ссылки на сеансы 1 и 2, значит и получим данные только по этим сеансам и, соответственно, только по билетам 1-6,10,11. Часть из них тоже скорее всего выпала, потому что в Места видимо нет данных на все места обеих залов. Выпали видимо билет 2 и 4
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 13.11.2012, 17:58   #9
HenryL
Пользователь
 
Регистрация: 09.06.2010
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
В Цены только ссылки на сеансы 1 и 2, значит и получим данные только по этим сеансам и, соответственно, только по билетам 1-6,10,11.
Точно же. Можно ли цены как-то по-другому хранить, более удобно?
Цитата:
Сообщение от Аватар Посмотреть сообщение
Места видимо нет данных на все места обеих залов.
Нет, места все забиты
HenryL вне форума Ответить с цитированием
Старый 13.11.2012, 18:07   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Все можно, только структура таблиц и внешних ссылок коряво сделана. Нужно делать так, чтобы невозможно было продать билет без нарушений ссылочной целостности
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос!!! Kekc13 SQL, базы данных 3 26.02.2012 22:29
Запрос на выборку и отчет на этот запрос Camelot_2012 Microsoft Office Access 2 21.12.2011 16:48
Запрос с CASE переделать в запрос с PIVOT (MS SQL Server 2005) Машуля SQL, базы данных 4 06.05.2010 21:09
запрос ссылается на несвязанный с ним запрос kolebatel SQL, базы данных 0 11.06.2008 12:50