Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从表和参考表中选择列、计数(id)_Php_Mysql_Sql - Fatal编程技术网

Php 从表和参考表中选择列、计数(id)

Php 从表和参考表中选择列、计数(id),php,mysql,sql,Php,Mysql,Sql,我有一个查询,希望从两个表(父表和引用表)中获取列,并选择引用表中每个帖子的类别总数 文章 id title poster pdate content 类别 id name cats_rel(带外键约束的关系表) 我想获取一个类别id和每个帖子类别总数的帖子列表 我使用它来获取所需的数据,但速度很慢。有没有更好的方法让它更快 SELECT cc.id, title, poster, pdate, content, js.pid, js.sno FROM articles cc LEFT J

我有一个查询,希望从两个表(父表和引用表)中获取列,并选择引用表中每个帖子的类别总数

文章

id
title
poster
pdate
content
类别

id
name
cats_rel(带外键约束的关系表)

我想获取一个类别id和每个帖子类别总数的帖子列表

我使用它来获取所需的数据,但速度很慢。有没有更好的方法让它更快

SELECT cc.id, title, poster, pdate, content, js.pid, js.sno 
FROM articles cc LEFT JOIN 
(SELECT pid, cat_id, count(cat_id) as sno FROM cats_rel GROUP BY pid)js 
ON js.pid = cc.id WHERE cc.status='approved' ORDER BY cc.id DESC

您不需要内部查询

SELECT cc.id, title, poster, pdate, content, js.pid, count(js.cat_id) as sno 
FROM articles wp 
LEFT JOIN cats_rel js ON js.pid = cc.id
WHERE wp.status='approved'
group by cc.id, title, poster, pdate, content, js.pid
ORDER BY cc.id DESC

您不需要内部查询

SELECT cc.id, title, poster, pdate, content, js.pid, count(js.cat_id) as sno 
FROM articles wp 
LEFT JOIN cats_rel js ON js.pid = cc.id
WHERE wp.status='approved'
group by cc.id, title, poster, pdate, content, js.pid
ORDER BY cc.id DESC

我将使用相关子查询重写查询

SELECT cc.id, cc.title, cc.poster, cc.pdate, cc.content, 
       (SELECT COUNT(*)
        FROM cats_rel js
        WHERE js.pid = cc.id
       ) as sno 
FROM articles cc
WHERE cc.status = 'approved'
ORDER BY cc.id DESC;
(在
select
列表中,
js.pid
似乎是多余的。)


对于此查询,您需要两个索引:
articles(status,id desc)
cats\u rel(pid)

我将使用相关子查询重写查询

SELECT cc.id, cc.title, cc.poster, cc.pdate, cc.content, 
       (SELECT COUNT(*)
        FROM cats_rel js
        WHERE js.pid = cc.id
       ) as sno 
FROM articles cc
WHERE cc.status = 'approved'
ORDER BY cc.id DESC;
(在
select
列表中,
js.pid
似乎是多余的。)


对于这个查询,您需要两个索引:
articles(status,id desc)
cats\u rel(pid)

@GordonLinoff很抱歉,它已经被修复了。@GordonLinoff很抱歉,它已经被修复了。我想在总数的旁边提取一个类别id(js.pid)。这很好,但这不是您的问题所要求的。它获取的是
pid
,当存在匹配项时,这相当于
cc.id
。我想在总数的旁边获取一个类别id(js.pid)。这很好,但这不是你的问题所要求的。它正在获取
pid
,当存在匹配项时,这相当于
cc.id