Модуль CerberCrypt: Разные SQL-запросы
Материал из BiTel WiKi
(Различия между версиями)
DimOn (Обсуждение | вклад) (Новая страница: «== Все активные карты на договорах == <source lang="sql"> SELECT contract.id, contract.title, contract.comment, user_card.id as ucid, user…») |
DimOn (Обсуждение | вклад) |
||
(3 промежуточные версии не показаны) | |||
Строка 4: | Строка 4: | ||
FROM `contract` | FROM `contract` | ||
JOIN `user_card_43` as `user_card` ON `user_card`.`cid` = `contract`.`id` AND (`user_card`.date1 IS NULL OR `user_card`.date1<=NOW()) AND (`user_card`.date2 IS NULL or NOW()<=`user_card`.date2) | JOIN `user_card_43` as `user_card` ON `user_card`.`cid` = `contract`.`id` AND (`user_card`.date1 IS NULL OR `user_card`.date1<=NOW()) AND (`user_card`.date2 IS NULL or NOW()<=`user_card`.date2) | ||
+ | </source>--[[Участник:DimOn|dimOn]] 06:53, 22 апреля 2011 (UTC) | ||
+ | |||
+ | == Все активные карты на договорах и все активные картпакеты на них, если есть == | ||
+ | Всё как в первом запросе, только лефтджойнятся картпакеты и пакеты с актуальными датами. Если не надо выводить юзер_карты без активных картпакетов, то, очевидно, лефтджоин сделать джойном. Ну, всё очевидно. | ||
+ | <source lang="sql"> | ||
+ | SELECT contract.id, contract.title, contract.comment, user_card.id as ucid, user_card.date1 as uc_date1, user_card.date2 as uc_date2, card_packet.id as cpid, card_packet.date1 as cp_date1, card_packet.date2 as cp_date2, packet.id as pid, packet.title as packet_title | ||
+ | FROM `contract` | ||
+ | JOIN `user_card_43` as `user_card` ON `user_card`.`cid` = `contract`.`id` AND (`user_card`.date1 IS NULL OR `user_card`.date1<=NOW()) AND (`user_card`.date2 IS NULL or NOW()<=`user_card`.date2) | ||
+ | |||
+ | LEFT JOIN `card_packet_43` as card_packet ON card_packet.ucid = user_card.id AND (card_packet.date1 IS NULL OR card_packet.date1<=NOW()) AND (card_packet.date2 IS NULL or NOW()<=card_packet.date2) | ||
+ | LEFT JOIN `packet_43` as packet ON packet.id = card_packet.pid | ||
</source> | </source> | ||
+ | Если надо, чтобы выводились только картпакеты с каким-то выбранным пакетом, то в конец этого запроса надо добавить всего лишь | ||
+ | <source lang="sql"> | ||
+ | WHERE packet.id = 17 | ||
+ | </source>--[[Участник:DimOn|dimOn]] 06:53, 22 апреля 2011 (UTC) | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | [[Категория:Модуль CerberCrypt]] |
Текущая версия на 06:53, 22 апреля 2011
Все активные карты на договорах
SELECT contract.id, contract.title, contract.comment, user_card.id AS ucid, user_card.date1 AS date1, user_card.date2 AS date2 FROM `contract` JOIN `user_card_43` AS `user_card` ON `user_card`.`cid` = `contract`.`id` AND (`user_card`.date1 IS NULL OR `user_card`.date1<=NOW()) AND (`user_card`.date2 IS NULL OR NOW()<=`user_card`.date2)
Все активные карты на договорах и все активные картпакеты на них, если есть
Всё как в первом запросе, только лефтджойнятся картпакеты и пакеты с актуальными датами. Если не надо выводить юзер_карты без активных картпакетов, то, очевидно, лефтджоин сделать джойном. Ну, всё очевидно.
SELECT contract.id, contract.title, contract.comment, user_card.id AS ucid, user_card.date1 AS uc_date1, user_card.date2 AS uc_date2, card_packet.id AS cpid, card_packet.date1 AS cp_date1, card_packet.date2 AS cp_date2, packet.id AS pid, packet.title AS packet_title FROM `contract` JOIN `user_card_43` AS `user_card` ON `user_card`.`cid` = `contract`.`id` AND (`user_card`.date1 IS NULL OR `user_card`.date1<=NOW()) AND (`user_card`.date2 IS NULL OR NOW()<=`user_card`.date2) LEFT JOIN `card_packet_43` AS card_packet ON card_packet.ucid = user_card.id AND (card_packet.date1 IS NULL OR card_packet.date1<=NOW()) AND (card_packet.date2 IS NULL OR NOW()<=card_packet.date2) LEFT JOIN `packet_43` AS packet ON packet.id = card_packet.pid
Если надо, чтобы выводились только картпакеты с каким-то выбранным пакетом, то в конец этого запроса надо добавить всего лишь
WHERE packet.id = 17