Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помощь с запросом / 7 сообщений из 7, страница 1 из 1
07.09.2013, 15:02:53
    #38389980
Linkos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь с запросом
Здравствуйте,

помогите пожалуйста разобраться с запросом

Есть две базы t1, вот такая

id price
1 1000
2 2000
3 3000

И t2 вот такая база

id price date
3 1000 01.10.2012
3 2000 05.10.2012
3 5000 09.10.2012
3 4000 10.10.2012
3 3500 11.10.2012
3 2500 12.10.2012
1 1500 02.10.2012

Нужно чтобы sql-запрос по определенному id(например 3) и в заданном промежутке времени(например с 01.10.2012 по 10.10.2012), возвращал вот такую таблицу

date price

01.10.2012 1000
02.10.2012 3000
03.10.2012 3000
04.10.2012 3000
05.10.2012 2000
06.10.2012 3000
07.10.2012 3000
08.10.2012 3000
09.10.2012 5000
10.10.2012 4000

Другими словами, чтобы на определенную дату запрос возвращал цену из первой таблицы, если цена не указана в таблице два
...
Рейтинг: 0 / 0
07.09.2013, 15:40:40
    #38389996
kixiro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь с запросом
Linkos, а принципиально это делать одним запросом?
Проще сделать в несколько запросов.
1. сформировать временную таблицу с диапазоном дат.
2. делать запрос связывающий 3 таблицы ( 2 с данными с временной с датами)
...
Рейтинг: 0 / 0
07.09.2013, 15:52:44
    #38390001
Linkos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь с запросом
Думаю можно несколькими главное, чтоб на выходе получалось нужная таблица. Порылся в интернете собрал такой запрос:
SELECT '2012-09-30' + INTERVAL (@rn := @rn + 1) DAY date,price
FROM
(SELECT 1 a UNION ALL SELECT 3 UNION ALL SELECT 3 UNION ALL SELECT 4) a,
(SELECT 1 a UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) b,
(SELECT @rn := 0) xx
INNER JOIN t1 ON id=3
LIMIT 10;

Но как сделать чтоб он для определенной даты брал цену из второй таблицы не знаю:(
...
Рейтинг: 0 / 0
07.09.2013, 15:57:22
    #38390002
kixiro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь с запросом
Linkos, просто делаете проверку в select

http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html
...
Рейтинг: 0 / 0
07.09.2013, 16:20:39
    #38390014
Linkos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь с запросом
Не могли бы продемонстрировать как это выглядит? Я не очень понимаю где разместить этот еще один селект
...
Рейтинг: 0 / 0
07.09.2013, 17:22:50
    #38390043
kixiro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь с запросом
Linkos, создается временная табличка с полями даты и поле id
заполняются даты и id равным значению в поиске.
Пример:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
mysql> select * from td;
+------+------------+
| id   | date       |
+------+------------+
|    3 | 2012-10-01 |
|    3 | 2012-10-02 |
|    3 | 2012-10-03 |
|    3 | 2012-10-04 |
|    3 | 2012-10-05 |
|    3 | 2012-10-06 |
|    3 | 2012-10-07 |
|    3 | 2012-10-08 |
|    3 | 2012-10-09 |
|    3 | 2012-10-10 |
+------+------------+



Потом запрос следующий:
Код: sql
1.
2.
3.
4.
5.
6.
select
     td.date,
	 if(t2.price is null,t1.price,t2.price) price
from
	td left join t2 on td.date=t2.date
	left join t1 on t1.id=td.id



Результат, по приведенным данным:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
+------------+-------+
| date       | price |
+------------+-------+
| 2012-10-01 |  1000 |
| 2012-10-02 |  1500 |
| 2012-10-03 |  3000 |
| 2012-10-04 |  3000 |
| 2012-10-05 |  2000 |
| 2012-10-06 |  3000 |
| 2012-10-07 |  3000 |
| 2012-10-08 |  3000 |
| 2012-10-09 |  5000 |
| 2012-10-10 |  4000 |
+------------+-------+
...
Рейтинг: 0 / 0
07.09.2013, 17:37:35
    #38390048
Linkos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помощь с запросом
Огромное спасибо!
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помощь с запросом / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]