![]() |
|
Модераторы: skyboy |
![]()
|
|
| bullvinkle |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 18.3.2008 Репутация: нет Всего: нет |
У меня есть база. Типа база веб-сайта. Вот ее схема:
![]() А мне надо сделать запрос на составление таблицы "Рейтинг источников информации за последний месяц (исходя из количества просмотров новости этого источника)". Я так понял, требуется следующее 1. Из таблицы ЧтениеНовостей выбрать коды всех новостей за последний месяц и отсортировать их по количеству просмотров. Здесь каждая запись в таблице и есть один просмотр. 2. Из таблицы Новости выбрать коды всех источников информации, у которых код_новости IN результаты_первого_пункта, и отсортировать эти результаты по количеству просмотров - вот этого я не представляю как сделать. 3. Из таблицы ИсточникиИнформации выбрать все поля, где код_источника IN результаты_предыдущего_пункта, и снова сортировать по количеству просмотров. До этого пункта еще не дошел. 4. И собственно создать таблицу.
Это то, что получается на пункте 2, но без сортировки. |
|||
|
||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
-------------------- Слава Україні! |
|||
|
||||
| bullvinkle |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 18.3.2008 Репутация: нет Всего: нет |
Я знаю про ODER BY
Но если писать вот так
то будет ошибка. Мне вот интересно ODER BY <что>. Мне надо выбранные код_источника из таблицы Новости упорядочить по количеству ....я даже не знаю как это выразить....записей в таблице ЧтениеНовостей которые сгруппированы по соответствующему коду_новости. Вобщем все запутано и извращенно. Я не понимаю как это возможно. |
|||
|
||||
| Gluttton |
|
|||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Ну что то вроде такого... Но не проверял, скорее всего будет с ошибками... Маленькая рецензия: Так делать нельзя т.к. поле ЧтениеНовостей.код_новости не указано в предложении SELECT... Если хотите более конкретной помощи, то выкладывайте сюда БД. -------------------- Слава Україні! |
|||
|
||||
| Gluttton |
|
||||||||||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
А вообще как бы...
1. Каркас (список источников информации):
2. Что бы можно было "исходить из количества просмотров" выполняем связывание таблицы ИсточникиНовостей и ЧтениеНовостей через все промежуточные таблицы (в данном случае это Новости) по ключам:
3. Обеспечиваем "за последний месяц"
4. Обеспечиваем подсчет количества разов прочтения новостей:
5. Финальная версия - обеспечиваем сортировку:
Добавлено @ 21:22 Но опять-таки не проверял, а значит будут ошибки А так же сравнение с датой написал на абум - нужно уточнить формат дат в Access... - уточнил формат даты... Соединение выполняю не по INNER JOIN, а по WHERE, что бы не париться со скобками, которые так любит Access Это сообщение отредактировал(а) Gluttton - 7.10.2009, 13:35 -------------------- Слава Україні! |
||||||||||||
|
|||||||||||||
| bullvinkle |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 18.3.2008 Репутация: нет Всего: нет |
Да там ошибка, что ODER BY конфликтует с DISTINGT, а если DISTINGT удалить, то ошибка про недопустимое имя.
Базу добавил в аттаче. Я ее заполнял сам и там очень мало записей и они бессмысленны, но читабельны. Поэтому WHERE DATEPART('m',дата_времени_чтения)=[Введите_номер_месяца], номер месяца может быть только 10, что бы результат был. Можно сразу в запросе исправить. А правильный уже упорядоченный список кодов_источника должен выглядеть так: 1002, 1004 (это типа у источников сэтими кодами самые часто читаемые новости ), а дальше в любом порядке 1001 и 1003. Отправил сообщение до того как увидел предыдущее, этот текст к сообщению № 4 Это сообщение отредактировал(а) bullvinkle - 6.10.2009, 21:39 Присоединённый файл ( Кол-во скачиваний: 3 )
2.7z 17,39 Kb |
|||
|
||||
| Gluttton |
|
||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Вот рабочий код:
Но данные не такие:
Думаю... -------------------- Слава Україні! |
||||
|
|||||
| bullvinkle |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 18.3.2008 Репутация: нет Всего: нет |
Вот этот код работает (его подправил, что бы можно было месяц выбрать)
Спасибо за помощь. Особенно за объяснение с картинками и поэтапно Данные как надо, то я ошибся в том сообщении.. Это сообщение отредактировал(а) bullvinkle - 6.10.2009, 21:55 |
|||
|
||||
| Gluttton |
|
||||
![]() Начинающий ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1170 Регистрация: 28.8.2008 Где: Феодосия Репутация: 24 Всего: 54 |
Окончательный вариант:
Для проверки под второй строки можно ввести после запятой: Подзапрос.количество... P.S. С датами решил не играться... Если по хорошему, то "за последний месяц" это значит, что нужно брать текущую дату (как это в Access не знаю) от неё отнимать месяц и с полученым значением проводить сравнение...
Всегда пожалуйста Это сообщение отредактировал(а) Gluttton - 6.10.2009, 22:01 -------------------- Слава Україні! |
||||
|
|||||
| bullvinkle |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 18.3.2008 Репутация: нет Всего: нет |
Во! Вот это точно то, что надо. Еще раз спасибо!
"За последний месяц" с помощью функции DATE() можно сделать. Но мне сейчас это не важно, база все-равно учебная, и заполнять ее правильно нет смысла, а времени уйдет много. Это сообщение отредактировал(а) bullvinkle - 6.10.2009, 22:11 |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |