Это запрос, который я написал, чтобы получить планы, выбранные пользователем. Но это возвращает записи в таблице usersubscription, даже если пользователь не подписан (если в таблице нет записей, соответствующих пользователю).
$userid = $_POST['userid'];
$videoid = $_POST['videoid'];
$subscribedquery = $this->db->query("
select id
from usersubscription
where plan_id IN (
SELECT DISTINCT plan_id
FROM subscribed_videos sv
where sv.videoid = $videoid
)
OR id IN (
SELECT DISTINCT assosiated_plan_id
FROM subscription_groups sg
JOIN subscribed_videos sv ON sv.plan_id = sg.plan_id
WHERE sv.videoid = $videoid
)
and user_id=$userid
");
Тот же скрипт: http://sqlfiddle.com/#!2/90b2e/1
Я ожидаю, что результат будет таким, если пользователь уже подписан на план выбранного видео, в противном случае запрос должен возвращать пустые записи:
Также как я могу вернуть записи, только если срок действия плана не истек для пользователя, использующего сам запрос. т. е. когда пользователь приобретает план, он будет внесен в таблицу usersubscription. Поле subscribed_on будет содержать время php unix(), в котором оно было приобретено. Поэтому я хотел бы получить в этом запросе только планы, соответствующие пользователю, и видео, срок действия которого не истек. Дни истечения срока действия хранятся в виде дней в поле days_limit таблицы subscription_plans (например: 15).
Может ли кто-нибудь помочь мне найти подходящее решение для этой проблемы?
Это запрос, который я написал, чтобы получить планы, выбранные пользователем. Но это возвращает записи в таблице usersubscription, даже если пользователь не подписан (если в таблице нет записей, соответствующих пользователю). [code]$userid = $_POST['userid']; $videoid = $_POST['videoid']; $subscribedquery = $this->db->query(" select id from usersubscription where plan_id IN ( SELECT DISTINCT plan_id FROM subscribed_videos sv where sv.videoid = $videoid ) OR id IN ( SELECT DISTINCT assosiated_plan_id FROM subscription_groups sg JOIN subscribed_videos sv ON sv.plan_id = sg.plan_id WHERE sv.videoid = $videoid ) and user_id=$userid "); [/code] Ниже я привожу структуру всех таблиц. [code]CREATE TABLE IF NOT EXISTS `subscribed_videos` ( `id` int(11) NOT NULL AUTO_INCREMENT, `plan_id` int(11) NOT NULL, `videoid` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=26 ;
CREATE TABLE IF NOT EXISTS `subscription_groups` ( `id` int(11) NOT NULL AUTO_INCREMENT, `plan_id` int(11) NOT NULL, `assosiated_plan_id` int(11) NOT NULL, `added_on` int(11) NOT NULL, PRIMARY KEY (`id`) );
CREATE TABLE IF NOT EXISTS `subscription_plans` ( `id` int(11) NOT NULL AUTO_INCREMENT, `plan` varchar(256) NOT NULL, `days_limit` int(11) NOT NULL, `added_on` int(11) NOT NULL, `status` int(11) NOT NULL, `rate` decimal(6,2) NOT NULL, PRIMARY KEY (`id`) );
CREATE TABLE IF NOT EXISTS `usersubscription` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, `plan_id` int(11) NOT NULL, `subscribed_on` int(11) NOT NULL, PRIMARY KEY (`id`) );
SELECT * FROM usersubscription +----+---------+---------+---------------+ | id | user_id | plan_id | subscribed_on | +----+---------+---------+---------------+ | 1 | 1 | 1 | 1399091458 | +----+---------+---------+---------------+ [/code] Тот же скрипт: http://sqlfiddle.com/#!2/90b2e/1 Я ожидаю, что результат будет таким, если пользователь уже подписан на план выбранного видео, в противном случае запрос должен возвращать пустые записи: [code]id --- 1 [/code] Также как я могу вернуть записи, только если срок действия плана не истек для пользователя, использующего сам запрос. т. е. когда пользователь приобретает план, он будет внесен в таблицу usersubscription. Поле subscribed_on будет содержать время php unix(), в котором оно было приобретено. Поэтому я хотел бы получить в этом запросе только планы, соответствующие пользователю, и видео, срок действия которого не истек. Дни истечения срока действия хранятся в виде дней в поле days_limit таблицы subscription_plans (например: 15). Может ли кто-нибудь помочь мне найти подходящее решение для этой проблемы?