簡體   English   中英

從內部聯接表獲取計數

[英]Getting count from inner join table

我有如下所述的表格:

subscription_plans (用於存儲所有計划的表)

id   plan   days_limit  added_on  status   rate
------------------------------------------------
1    PlanA     15       1398249706  1      150.00
2    PlanB     15       1398249706  1      150.00     

subscriptiond_videos (用於存儲每個計划中的視頻詳細信息的表)

id   plan_id   videoid
----------------------
1      1        1
2      2        2

subscription_groups (用於存儲組的表,其中一個計划可以是另一個計划的一部分,即,計划A是一個計划,另外兩個計划分別為計划B和C)

id   plan_id   assosiated_plan_id   added_on
----------------------------------------------
1      1         2                  1398249706

usersubscription (用於存儲用戶訂閱計划的表)

id    user_id   plan_id  subscribed_on
---------------------------------------
1     1         1        1398771106

現在,我的問題是如何獲得每個計划的視頻數量。 如果計划A同時包含計划B和計划C( subscription_groups表),則計數應返回該特定計划中每個計划的總視頻計數。 現在,我完成了一個查詢,該查詢將返回計划詳細信息以及計划的視頻計數,但是我無法將其與subscription_groups結合使用 如何在單個查詢中完成此操作。

 $data['planquery']=$this->db->query("select 
 us.plan_id,us.subscribed_on,sp.plan,sp.days_limit,sp.rate,count(sv.videoid) from
 usersubscription as us INNER JOIN
 subscription_plans as sp ON us.plan_id=sp.id INNER JOIN subscribed_videos as sv ON       sp.id=sv.plan_id where sp.status=1 and us.user_id=1");

預期結果:

plan_id subscribed_on  plan  days_limit  rate   count
-------------------------------------------------------
1       1398771106     PlanA  15         150.00  2

誰能幫助我找到解決方案?

提前致謝。

你可以這樣

SELECT 
  us.plan_id,
  us.subscribed_on,
  sp.plan,
  sp.days_limit,
  sp.rate,
  COUNT(sv.videoid) 
FROM
  usersubscription AS us 
  RIGHT JOIN subscription_plans AS sp 
    ON us.plan_id = sp.id 
  INNER JOIN subscribed_videos AS sv 
    ON sp.id = sv.plan_id 
  INNER JOIN subscription_groups g
    ON(g.plan_id =sv .plan_id OR sv.plan_id= g.assosiated_plan_id)
 WHERE sp.status = 1 
 AND (us.user_id = 1 OR us.user_id IS NULL )

演示

由於用戶僅關聯了計划,但關聯的計划也可以鏈接了另一個計划,因此最后一個條件將檢查用戶標識,但對於null到,對於第二個鏈接的計划,由於對subscription_plans正確加入,用戶ID將為null

編輯

SELECT 
u.plan_id,
u.subscribed_on,
p.plan,
  p.days_limit,
  p.rate
,COUNT(DISTINCT v.`videoid`) 
 FROM `usersubscription` u
JOIN `subscription_groups` g 
ON (u.`plan_id` = g.`plan_id`)
RIGHT JOIN `subscription_plans` p 
ON(u.`plan_id` = p.`id` OR g.`assosiated_plan_id` = p.`id`)
INNER JOIN `subscribed_videos` v  ON(v.`plan_id`=g.`assosiated_plan_id` OR u.`plan_id`= v.`plan_id`)
WHERE u.`id`=1 AND p.`status` = 1

演示1個 DEMO2

對於視頻ID,您可以使用group_concat

SELECT 
u.plan_id,
u.subscribed_on,
p.plan,
  p.days_limit,
  p.rate
,COUNT(DISTINCT v.`videoid`) `video_count` ,
GROUP_CONCAT(DISTINCT v.`videoid`) `video_ids`
 FROM `usersubscription` u
JOIN `subscription_groups` g 
ON (u.`plan_id` = g.`plan_id`)
RIGHT JOIN `subscription_plans` p 
ON(u.`plan_id` = p.`id` OR g.`assosiated_plan_id` = p.`id`)
INNER JOIN `subscribed_videos` v  ON(v.`plan_id`=g.`assosiated_plan_id` OR u.`plan_id`= v.`plan_id`)
WHERE u.`id`=1 AND p.`status` = 1

演示1a 演示2a

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM