Php SQL+左连接+相似+计数

Php SQL+左连接+相似+计数,php,mysql,count,left-join,Php,Mysql,Count,Left Join,我必须使用PDO进行SQL查询,以获得带有左连接的计数和总计计数 这是我的数据库 表内容 ID | TYPE | ACTION | 1 | picture | ['1324234324', '4545647777'] | 1 | picture | ['4545647777', '7888945555'] | 1 | video | ['1324234

我必须使用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获取每种类型的计数

这就是我所需要的结果

第1324234324页有一张图片和一段视频 第45647777页有2张图片和0个视频 第7888945555页有1张图片和0个视频 现在我的问题是:

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个小时了,我没有任何线索:-

试试这个:

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

或者使用like代替CONTAINS,将所需内容分解为多个部分。为此编写一个查询。把它连接起来

您需要在内容的每一行中查找页面中的每个pageid。您需要包含单个PageID的内容的行数

要提高性能,请更改存储数据的方式。使用第三个表存储内容和页面之间的关系。这将允许新查询利用索引。

如下所示:

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是id唯一的数字,与您的all 1不同。
id列用于什么?为什么它们都是1?另外,如果你规范化内容表,整个事情可能会更容易。你有一个.page\u id,但没有该名称的列,你有PAGEID和A.page\u name。你不应该把A.page和B.countId作为B.id吗?。但结果真的不是我所期望的——你现在得到了什么结果?是否有任何错误,或者您是否没有检查错误?查询是否在您的控制台中工作,而不是在PDO中工作,或者您是否还没有为其编写任何PDO?你的问题和你的查询一样不清楚。所有的id都是“1”?是的,我的错,loll不都是相同的id 1从类型为“picture”的内容中选择COUNT*,并将CONCAT“%”,A.pageid“%”等操作作为总图片
SELECT p.pageid, type, count(*) cnt FROM `PAGE` p 
 LEFT JOIN `CONTENT` c ON c.action like concat('%', p.pageid, '%')
 Group By PAGEID, `type`