|
|
|
| Есть таблица, в которой хранятся типы цен:
CREATE TABLE `prices_type` (
`id_price_type` - Первичный ключ
`name` - Имя
`id_currency` - Валюта
`id_base_price` - Базовая цена (Ссылка на Первичный ключ)
`commentary` - Коментарий
) COMMENT='Типы цен';
|
В поле `id_base_price` храница циферка - ссылка на `id_price_type`.
Т.е. например: "Цена клиента" имеет базовую цену "Входная цена".
Оба типа цен хранятся в этой таблице как 2 разные записи. Только в "Цене клиента" в поле `id_base_price` стоит ссылка на строку "Входная цена".
Нужно сделать запрос, чтобы получить результирующую таблицу с такими же полями как и таблица 'prices_type', только чтобы в поле `id_base_price` была не циферка (ссылка) а имя взятое из строки на которую эта циферка ссылается. | |
|
|
|
|
|
|
|
для: tAleks
(18.08.2006 в 19:47)
| | Народ!!!! ХЕЛП!!!! Гарю!!!! | |
|
|
|
|
|
|
|
для: tAleks
(18.08.2006 в 19:47)
| | Хм... а с двумя таблицами не проще выйдет? Что-то не очень понятно, что таблица моделирует и какой запрос нужно осуществить? | |
|
|
|
|
|
|
|
для: cheops
(19.08.2006 в 00:24)
| | Тиблица `prices_type`
--------------------------------------------------------------------------
id_price_type | name | id_currency | id_base_price | commentary |
--------------------------------------------------------------------------
1 Входная 1 NULL Цена покупки
2 Цена клиента 1 1 Цена для клиента
3 VIP 1 2 Цена для VIP клиента
--------------------------------------------------------------------------
|
Т.е. "Цена клиента" имеет базовую цену "Входная", и к примеру потом может рассчитываться динамически,
берем базовую цену ("Входная"), прибавляем 5% и получаем "Цена клиента".
А "VIP" имеет базовую цену "Цена клиента" и уже рассчитывается относительно этой базоовой цены.
Все примерно как в "1С: Торговля и Склад" (только упроцено).
Нужен запрос чтобы сделать вот такую таблицу:
--------------------------------------------------------------------------
id_price_type | name | id_currency | id_base_price | commentary |
--------------------------------------------------------------------------
1 Входная 1 Цена покупки
2 Цена клиента 1 Входная Цена для клиента
3 VIP 1 Цена клиента Цена для VIP клиента
--------------------------------------------------------------------------
|
Чтобы в поле "id_base_price" были не циферки а названия этих цен.
И если это не правильно, то как сделать с двумя таблицами? | |
|
|
|
|
|
|
|
для: tAleks
(19.08.2006 в 10:49)
| | Можно поступить следующим образом
SELECT prices_type.id_price_type AS id_price_type,
prices_type.name AS name,
prices_type.id_currency AS id_currency,
price.name AS id_base_price ,
prices_type.commentary AS commentary
FROM prices_type, prices_type AS price
WHERE prices_type.id_base_price = price.id_price_type
GROUP BY prices_type.id_price_type
|
| |
|
|
|
|
|
|
|
для: cheops
(19.08.2006 в 11:39)
| | Попробовал.....
Если в таблице есть записи, у которых нет базовой цены, то они не попадают в результат запроса. Т.е. из такой таблицы:
--------------------------------------------------------------------------
id_price_type | name | id_currency | id_base_price | commentary |
--------------------------------------------------------------------------
1 Входная 1 0 Цена покупки
2 Цена клиента 1 1 Цена для клиента
3 VIP 1 0 Цена для VIP клиента
--------------------------------------------------------------------------
|
Извлекается только запись 2. А надо чтобы все извлекались. | |
|
|
|
|
|
|
|
для: tAleks
(19.08.2006 в 12:01)
| | Тогда попробуйте следующий запрос
SELECT prices_type.id_price_type AS id_price_type,
prices_type.name AS name,
prices_type.id_currency AS id_currency,
price.name AS id_base_price ,
prices_type.commentary AS commentary
FROM prices_type LEFT JOIN prices_type AS price
WHERE prices_type.id_base_price = price.id_price_type
GROUP BY prices_type.id_price_type
|
| |
|
|
|
|
|
|
|
для: cheops
(19.08.2006 в 16:18)
| | Только не WHERE а ON | |
|
|
|
|
|
|
|
для: Trianon
(19.08.2006 в 18:56)
| | Согласен. | |
|
|
|
|
|
|
|
для: cheops
(19.08.2006 в 16:18)
| | Запрос в принципе работает. Спасибо.
А зачем вот эта строка:
GROUP BY prices_type.id_price_type
|
Я вот сейчас экспериментирую, и что с ней, что без нее результат одинаковый. | |
|
|
|
|
|
|
|
для: tAleks
(20.08.2006 в 13:51)
| | >Я вот сейчас экспериментирую, и что с ней, что без нее результат одинаковый.
В принципе так и есть, это из-за условия prices_type.id_base_price = price.id_price_type, но если бы его не было, то выводилось бы слишком много дублированных записей, GROUP BY позволяет группировать такие записи по определённому полю. | |
|
|
|