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
。