Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запрос с сортировкой и группировкой 
:(
    Опции темы
alligator
Дата 7.9.2014, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: нет
Всего: 1



Всем доброго времени суток!
В sql я не спец.... есть несколько вопросов:
Задача такая:
вывести данные по типу валюты и вклада в порядке убывания макс -> мин

1. возможно ли сделать выборку сразу из всех таблиц и отсортировать только по данным из таблицы archive ?
2. или лучше просто сортировать только по данным из таблица archive делая выборку из других по мере надобности
структура бд:

Код


--
-- База данных: `deposits`
--

-- --------------------------------------------------------

--
-- Структура таблицы `archive`
--

CREATE TABLE IF NOT EXISTS `archive` (
`uid` int(11) NOT NULL,
  `bank_uid` bigint(15) NOT NULL,
  `currency_uid` int(11) NOT NULL,
  `type_uid` int(11) NOT NULL,
  `date_uid` int(11) NOT NULL,
  `bet` decimal(6,4) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=12655 DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Структура таблицы `banks`
--

CREATE TABLE IF NOT EXISTS `banks` (
`uid` int(11) NOT NULL,
  `name` varchar(200) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=681 DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Структура таблицы `currency`
--

CREATE TABLE IF NOT EXISTS `currency` (
`uid` int(4) NOT NULL,
  `currency` varchar(11) NOT NULL,
  `curr_xml` varchar(15) NOT NULL,
  `curr_name` varchar(50) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Структура таблицы `date`
--

CREATE TABLE IF NOT EXISTS `date` (
`uid` int(11) NOT NULL,
  `docdate` date NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Структура таблицы `regnum`
--

CREATE TABLE IF NOT EXISTS `regnum` (
`uid` int(11) NOT NULL,
  `number` bigint(11) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=678 DEFAULT CHARSET=utf8;

-- --------------------------------------------------------

--
-- Структура таблицы `type`
--

CREATE TABLE IF NOT EXISTS `type` (
`uid` int(4) NOT NULL,
  `type_bet` varchar(50) NOT NULL,
  `type_xml` varchar(50) NOT NULL,
  `name` varchar(100) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;


сортирую таким запросом:
Код

SELECT * FROM `archive` group by bank_uid ORDER BY currency_uid=1 and type_uid=3 and date_uid=1 and max(bet) desc


Это сообщение отредактировал(а) alligator - 7.9.2014, 16:28

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  db.png 36,03 Kb
PM MAIL   Вверх
alligator
Дата 7.9.2014, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: нет
Всего: 1



данные


Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  archive.png 11,04 Kb
PM MAIL   Вверх
alligator
Дата 7.9.2014, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: нет
Всего: 1



Код

SELECT * FROM `archive` ORDER BY bet desc

с таким запросом сортирует по убыванию нормально но, в него необходимо добавить параметры валюты , даты и типа вклада....


постараюсь сформировать задачу точнее:
из таблицы archive хочу получить отсортированный массив вида:
1
вклад 1 дата валюта ставка(в зависимости от выбранных параметров юзером)
вклад 2
вклад 3
вклад 4
вклад 5
вклад 6
2
вклад 1 дата(в зависимости от выбранной юзером) валюта ставка
вклад 2
вклад 3
вклад 4
вклад 5
вклад 6

Это сообщение отредактировал(а) alligator - 7.9.2014, 18:01
PM MAIL   Вверх
ТоляМБА
Дата 7.9.2014, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 4
Всего: 252



Цитата(alligator @  7.9.2014,  18:12 Найти цитируемый пост)
в него необходимо добавить параметры валюты , даты и типа вклада....
Читаем Inner Join

Цитата(alligator @  7.9.2014,  18:12 Найти цитируемый пост)
 хочу получить отсортированный массив вида:


Код
Select *
From
(
Select "1" as F, Filed1, Field2, Fieldn
From Table1
Where FieldStavka=10
Union
Select "2", Filed1, Field2, Fieldn
From Table1
Where FieldData="10/08/12"
) as T
Order by 1, 2

PM   Вверх
alligator
Дата 8.9.2014, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: нет
Всего: 1



Не понял как работают эти запросы....

Допустим есть : 3 валюты, 6 типов ставок по валютам, дата информации
к примеру хочу отсортировать таблицу по 1 валюте 4 типу вклада, максимальной ставке на 08.2014
по шагово.... с чего начинаю ?

Это сообщение отредактировал(а) alligator - 8.9.2014, 10:32

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  tabble.png 111,28 Kb
PM MAIL   Вверх
ТоляМБА
Дата 8.9.2014, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 4
Всего: 252



Цитата(alligator @  8.9.2014,  12:06 Найти цитируемый пост)
 хочу отсортировать таблицу 
Сортировка это вывод данных по возрастанию либо убыванию (Order by). А тебе нужны условия (Where)
Цитата(alligator @  8.9.2014,  12:06 Найти цитируемый пост)
по шагово.... с чего начинаю ?

Соединяешь нужные таблицы с помощью Inner Join
Цитата(alligator @  8.9.2014,  12:06 Найти цитируемый пост)
по 1 валюте 4 типу вклада

Цитата(alligator @  8.9.2014,  12:06 Найти цитируемый пост)
 на 08.2014
Прописываешь условия во Where
Цитата(alligator @  8.9.2014,  12:06 Найти цитируемый пост)
максимальной ставке
Сортируешь по столбцу "Ставка" по убыванию Order by FieldStavka desc и выводишь только одну строку Limit 1

PM   Вверх
alligator
Дата 8.9.2014, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: нет
Всего: 1



Цитата(ТоляМБА @  8.9.2014,  12:21 Найти цитируемый пост)
Соединяешь нужные таблицы с помощью Inner Join

у меня одна таблица, а Inner Join работает только с двумя....


Это сообщение отредактировал(а) alligator - 8.9.2014, 11:28
PM MAIL   Вверх
ТоляМБА
Дата 8.9.2014, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 4
Всего: 252



Цитата(alligator @  7.9.2014,  14:56 Найти цитируемый пост)
Структура таблицы `archive`

Цитата(alligator @  7.9.2014,  14:56 Найти цитируемый пост)
Структура таблицы `banks`

Цитата(alligator @  7.9.2014,  14:56 Найти цитируемый пост)
Структура таблицы `currency`

Цитата(alligator @  7.9.2014,  14:56 Найти цитируемый пост)
Структура таблицы `date`

Цитата(alligator @  7.9.2014,  14:56 Найти цитируемый пост)
Структура таблицы `regnum`

Цитата(alligator @  7.9.2014,  14:56 Найти цитируемый пост)
Структура таблицы `type`

Цитата(alligator @  8.9.2014,  13:27 Найти цитируемый пост)
у меня одна таблица

 smile Сначала прекрати противоречить сам себе


Цитата(alligator @  8.9.2014,  13:27 Найти цитируемый пост)
а Inner Join работает только с двумя

Так, на будущее, с помощью Inner Join можно соединить одну таблицу саму с собой  smile 

Это сообщение отредактировал(а) ТоляМБА - 8.9.2014, 12:26
PM   Вверх
alligator
Дата 8.9.2014, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: нет
Всего: 1



Цитата(ТоляМБА @ 8.9.2014,  13:21)
Цитата(alligator @  7.9.2014,  14:56 Найти цитируемый пост)
Структура таблицы `archive`

Цитата(alligator @  7.9.2014,  14:56 Найти цитируемый пост)
Структура таблицы `banks`

Цитата(alligator @  7.9.2014,  14:56 Найти цитируемый пост)
Структура таблицы `currency`

Цитата(alligator @  7.9.2014,  14:56 Найти цитируемый пост)
Структура таблицы `date`

Цитата(alligator @  7.9.2014,  14:56 Найти цитируемый пост)
Структура таблицы `regnum`

Цитата(alligator @  7.9.2014,  14:56 Найти цитируемый пост)
Структура таблицы `type`

Цитата(alligator @  8.9.2014,  13:27 Найти цитируемый пост)
у меня одна таблица

 smile Сначала прекрати противоречить сам себе


Цитата(alligator @  8.9.2014,  13:27 Найти цитируемый пост)
а Inner Join работает только с двумя

Так, на будущее, с помощью Inner Join можно соединить одну таблицу саму с собой  smile

весь архив хранится в таблице archive , ни кто и не противоречит.
скрин данных таблицы archive есть во втором посту

Это сообщение отредактировал(а) alligator - 8.9.2014, 12:48
PM MAIL   Вверх
ТоляМБА
Дата 8.9.2014, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 4
Всего: 252



Цитата(alligator @  8.9.2014,  14:34 Найти цитируемый пост)
скрин данных таблицы archive есть во втором посту


alligator, ну например, как вы из неё будете выбирать тип вклада "1-3"? Вы его по ID помните? А если типов вклада будет 200? А диапазон дат, которые будут постоянно добавляться тоже по памяти?

Код
Select a.*
From arcive a
inner join currency c
on a.currency_uid = c.uid
inner join type t
on a.type_uid = t.uid
where c.currency = "RUR" and t.type_bet="1-3" 
Выведет всю таблицу archive только с рублёвыми ставками со сроком вклада "1-3".

Дальнейшее связывание с другими таблицами (Inner Join) и условия аналогично.

Добавлено @ 13:52
Цитата(alligator @  8.9.2014,  12:06 Найти цитируемый пост)
Присоединённый файл ( Кол-во скачиваний: 5 ) 
  tabble.png 111,28 Kb

Эту то таблицу вы как формировали?

Это сообщение отредактировал(а) ТоляМБА - 8.9.2014, 14:08
PM   Вверх
alligator
Дата 8.9.2014, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: нет
Всего: 1



Цитата(ТоляМБА @  8.9.2014,  14:49 Найти цитируемый пост)
Select a.*
From arcive a
inner join currency c
on a.currency_uid = c.uid
inner join type t
on a.type_uid = t.uid
where c.currency = "RUR" and t.type_bet="1-3" 

Получается это вариант со связыванием таблиц по uid ?



Цитата(ТоляМБА @  8.9.2014,  14:49 Найти цитируемый пост)
Эту то таблицу вы как формировали?

в таком порядке данные пишет скрипт в таблицу.


Цитата(ТоляМБА @  8.9.2014,  14:49 Найти цитируемый пост)
Выведет всю таблицу archive только с рублёвыми ставками со сроком вклада "1-3".


при такой сортировке в массив попадут данные только одной валюты и ставки..... 
возможно вывести всю таблицу просто сортированную....?

Это сообщение отредактировал(а) alligator - 8.9.2014, 17:05
PM MAIL   Вверх
ТоляМБА
Дата 8.9.2014, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 4
Всего: 252



Цитата(alligator @  8.9.2014,  18:58 Найти цитируемый пост)
при такой сортировке
 smile Да не сортировка это!!!  

 smile 
Цитата(ТоляМБА @  8.9.2014,  13:21 Найти цитируемый пост)
Сортировка это вывод данных по возрастанию либо убыванию (Order by)


Цитата(alligator @  8.9.2014,  18:58 Найти цитируемый пост)
возможно вывести всю таблицу

Код
Select c.currency, t.type_uid, a.bet
From arcive a
inner join currency c
on a.currency_uid = c.uid
inner join type t
on a.type_uid = t.uid
 Остальные таблицы присоединяй также по соответствующим uid. Весь запрос я тебе писать не буду - он очевиден.

Цитата(alligator @  8.9.2014,  18:58 Найти цитируемый пост)
 просто сортированную
У нас с тобой разный взгляд на сортировку, я не понимаю что ты этим хочешь сказать.

Это сообщение отредактировал(а) ТоляМБА - 8.9.2014, 17:40
PM   Вверх
alligator
Дата 9.9.2014, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 730
Регистрация: 28.1.2004

Репутация: нет
Всего: 1



вроде потихоньку начал вкуривать...... 
Код

Select b.name,r.number as regnum,c.currency, t.uid, a.bet 
From archive a inner join banks b
 on a.bank_uid = b.uid 
inner join regnum r 
 on a.bank_uid = r.uid 
inner join currency c 
 on a.currency_uid = c.uid 
inner join type t on a.type_uid = t.uid


сейчас формирует так: построчно

имя банка 1 | регномер | имя валюты | uid вклада | ставка(bet)
имя банка 1 | регномер | имя валюты | uid вклада  | ставка
имя банка 1 | регномер | имя валюты | uid вклада  | ставка
имя банка 1 | регномер | имя валюты | uid вклада  | ставка

имя банка 2 | регномер | имя валюты | uid вклада | ставка(bet)
имя банка 2 | регномер | имя валюты | uid вклада  | ставка
имя банка 2 | регномер | имя валюты | uid вклада  | ставка
имя банка 2 | регномер | имя валюты | uid вклада  | ставка

выводить или сортировать было бы удобно из массива следующего вида(добавить доп столбцы):

имя банка 1 | регномер | ставка 1 валюта1(bet) | ставка 2 валюта1(bet) | ставка 1 валюта 2(bet) | 
имя банка 2 | регномер | 
имя банка 3 | регномер | 
имя банка 4 | регномер | 


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0890 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.