我必须使用PDO进行SQL查询,以使用左连接和总计数进行计数。
这是我的数据库
表格内容
ID | TYPE | ACTION |
1 | picture | ['1324234324', '4545647777'] |
1 | picture | ['4545647777', '7888945555'] |
1 | video | ['1324234324'] |
表格页面
ID | PAGEID |
1 | 1324234324 |
1 | 4545647777 |
1 | 7888945555 |
这是我的问题!我想通过pageid获取每种类型的COUNT()
ex :(这是我需要的结果)
现在我的查询是:
SELECT
A.page_name AS page_name,
IFNULL(B.countId, 0) AS total_picture,
IFNULL(C.countId, 0) AS total_video
FROM page A
LEFT JOIN (SELECT action, COUNT(id) as countId FROM content WHERE type = 'picture') B ON (B.action LIKE CONCAT('%', A.page_id, '%'))
LEFT JOIN (SELECT action, COUNT(id) as countId FROM content WHERE type = 'video') C ON (C.action LIKE CONCAT('%', A.page_id, '%'));
但结果真的不是我所期望的: - /
有人可以帮帮我吗?已经10个小时,我不知道: - (
答案 0 :(得分:1)
试试这个:
select
page_name
, (select COUNT(*) from content where type = 'picture' and CONTAINS(action, page.page_id)) as total_picture
, (select COUNT(*) from content where type = 'video' and CONTAINS(action, page.page_id)) as total_video
from page
(或使用"喜欢"而不是CONTAINS)
答案 1 :(得分:1)
将您需要的内容细分为零件。写一个查询。加入吧。
您需要在pageid
的每一行中找到page
中的每个content
。您需要content
中包含单个pageid
s。
SELECT p.pageid, vid.numVideo, pic.numPicture
FROM page p
LEFT JOIN (
SELECT p.pageid, COUNT(id) AS numVideo
FROM page p
INNER JOIN content c
ON c.content LIKE CONCAT('%', p.pageid, '%')
WHERE c.type = 'video'
GROUP BY p.pageid
) vid ON vid.pageid = p.pageid
LEFT JOIN (
SELECT p.pageid, COUNT(id) AS numPicture
FROM page p
INNER JOIN content c
ON c.content LIKE CONCAT('%', p.pageid, '%')
WHERE c.type = 'picture'
GROUP BY p.pageid
) pic ON pic.pageid = p.pageid
要提高性能,请更改存储数据的方式。使用第3个表来存储内容和页面之间的关系。这将允许新查询利用索引。
答案 2 :(得分:0)
像这样:
SELECT p.pageid, type, count(*) cnt FROM `PAGE` p
LEFT JOIN `CONTENT` c ON c.action like concat('%', p.pageid, '%')
Group By PAGEID, `type`
注意强>:
PAGEID
为archer
列,ACTION
为archer
。PAGEID
和CONTENT.id
的{{1}}唯一数字与您的所有id
不同。