Модуль CerberCrypt: Разные SQL-запросы

Материал из BiTel WiKi

(Различия между версиями)
Перейти к: навигация, поиск
 
Строка 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>
+
</source>--[[Участник:DimOn|dimOn]] 06:53, 22 апреля 2011 (UTC)
== Все активные карты на договорах и все активные картпакеты на них, если есть ==
== Все активные карты на договорах и все активные картпакеты на них, если есть ==
Строка 19: Строка 19:
<source lang="sql">
<source lang="sql">
WHERE packet.id = 17
WHERE packet.id = 17
-
</source>
+
</source>--[[Участник:DimOn|dimOn]] 06:53, 22 апреля 2011 (UTC)
 +
 
 +
 
[[Категория:Модуль CerberCrypt]]
[[Категория:Модуль 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)
--dimOn 06:53, 22 апреля 2011 (UTC)

Все активные карты на договорах и все активные картпакеты на них, если есть

Всё как в первом запросе, только лефтджойнятся картпакеты и пакеты с актуальными датами. Если не надо выводить юзер_карты без активных картпакетов, то, очевидно, лефтджоин сделать джойном. Ну, всё очевидно.

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
--dimOn 06:53, 22 апреля 2011 (UTC)
Личные инструменты