powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Соединение таблицы с последними значениями другой таблицы
6 сообщений из 6, страница 1 из 1
Соединение таблицы с последними значениями другой таблицы
    #33488846
Amarok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация следующая:
Есть две таблицы

movements(движения товаров):
--------------------------------------------------
| period | shop_id | good_id | quantity |
--------------------------------------------------

prices(цены товаров):
---------------------------------------------
| period | shop_id | good_id | price |
---------------------------------------------

Связь таблиц соответственно по полям shop_id и good_id.
Поле period - это дата либо движения, либо установки цены.

Необходимо получить запрос дающий следующий результат:

| period | shop_id | good_id | quantity | price |

где соответственно цена - это цена товара, ближайшая к дате движения.

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

Пробовал сделать так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT m.period, m.good_id, m.quantity, p.price
FROM movements AS m
LEFT JOIN prices AS p ON (
p.shops_id = m.shops_id AND p.goods_id = m.goods_id AND p.period = ( 
SELECT max( pr.period ) 
FROM prices AS pr
WHERE (
p.shops_id = pr.shops_id
) AND (
p.goods_id = pr.goods_id
) AND (
pr.period <= m.period
) ) 
)

Как это можно сделать по другому?
...
Рейтинг: 0 / 0
Соединение таблицы с последними значениями другой таблицы
    #33490333
Фотография Dinky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну если заменить LEFT на INNER то будет быстрее, цены-то на все товары по-идее есть? ;)
индексы проверить не помешало бы - что EXPLAIN говорит?

Ну а так чтоб совсем быстро - кэшировать текущие цены надо ;)
--
Dmitry
...
Рейтинг: 0 / 0
Соединение таблицы с последними значениями другой таблицы
    #33490808
Amarok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dinkyну если заменить LEFT на INNER то будет быстрее, цены-то на все товары по-идее есть? ;)
индексы проверить не помешало бы - что EXPLAIN говорит?
Ну а так чтоб совсем быстро - кэшировать текущие цены надо ;)

Не все так просто :))
Цены может не быть, хотя это и редкость...

Explain:
id | select_type |table | type | key | ref
1|PRIMARY |m |ref |docs_id |const
1|PRIMARY |p |ref |good_id |m.good_id
2|DEPENDENT SUBQUE |pr |ref |good_id |p.good_id
Вроде как все в порядке...

А вот с кешированием - это как? если движение хранятся за большой период и отчет естественно надо тоже за большой период - цены меняются, нужно получать каждый раз ее значение....
...
Рейтинг: 0 / 0
Соединение таблицы с последними значениями другой таблицы
    #33492800
Фотография Dinky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в порядке или нет - будет видно на много записей-много запросов ;)

ну не кэшировать в данном случае, а скорее слегка денормализовать - почему бы не положить цену прямо в movements?

--
Dmitry
...
Рейтинг: 0 / 0
Соединение таблицы с последними значениями другой таблицы
    #33492805
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему что-то с реализацией задачи, почему движение отделено от цен?
...
Рейтинг: 0 / 0
Соединение таблицы с последними значениями другой таблицы
    #33493371
Amarok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Валентин КПо-моему что-то с реализацией задачи, почему движение отделено от цен?
Потому что цены назначаются независимо, от движений.
В данном случае пример - списание товара, при списании цена не указывается, т.к. списывается по себестоимости, а нужен отчет в определенном типе цен. Как-то так..
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Соединение таблицы с последними значениями другой таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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