用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2716|回复: 8
收起左侧

[已解决] 求助这样的查询如何写?

[复制链接]
发表于 2010-10-13 12:42:58 | 显示全部楼层 |阅读模式
请问这样的表如何写:
article表:放的是文章内容
id   title  content
1   测试1  测试1内容
2   测试2  测试2内容

comment表:放的是文章的评论,aid是文章的id
id  aid  content
1   1   文章1的评论1
2   1   文章1的评论2
3   2   文章2的评论1
4   2   文章2的评论2

aboutarticle表:放的是关于文章的点击次数aid代表文章的id
id  aid  hits   
1   1   50   
2      2       100

现在我想做一个像图中一样的文章列表,内容分别显示:标题、内容、评论条数、点击次数。
我已经用下面的代码查出了文件的标题、内容、点击次数、如何才能同时查出评论条数呢?
//取得文章列表
    function get_article_list(){
        $this->db->select('content.id,cid,anthor,title,preview,user.id,user.username,content.data,category.category');
        $this->db->from('content');
        $this->db->join('category','category.id=content.cid','left');
        $this->db->join('user','user.id=content.anthor','left');
        //$this->db->join('comment','content.id=comment.aid','left');
        $query = $this->db->get();
        return $query->result();
    }
}

QQ截图未命名.jpg
发表于 2010-10-13 14:46:45 | 显示全部楼层
$sql="select count(*) as cnt
from comment where aid=?";

$this->db->query($sql,array($aid));
foreach($res->result_array() as $row)
{
   return $row['cnt'];
}
发表于 2010-10-14 08:46:13 | 显示全部楼层
用无敌的join
发表于 2010-10-14 09:32:29 | 显示全部楼层
本帖最后由 zhangcjl 于 2010-10-15 02:37 编辑

sorry  ~~~我只是想坐等回答,有点高兴,我也遇到这样的问题~~呵呵~~

评分

参与人数 1威望 -1 收起 理由
saturn -1 请勿在技术版发表无意义的内容,表达爱意请 ...

查看全部评分

发表于 2010-10-14 14:01:35 | 显示全部楼层
假设有两个表a, b。结构分别与你前两个表结构相同。

SQL复制代码
SELECT a. * , COUNT( b.id )
FROM a
LEFT JOIN b ON a.id = b.aid
GROUP BY b.aid
复制代码


以上代码自己测试下,我没有做实际测试,应该问题不大。

没有放第三个表的原因是,我比较懒。看到你第一个表与第三个表之间的关系是一对一的,所以处理起来非常简单。

特别注意:这里务必要制定成LEFT JOIN,而非默认的INNER JOIN。因为有些文章可能没有任何评论。
发表于 2010-10-14 14:38:52 | 显示全部楼层
标题、内容、评论条数、点击次数 。简单的两表连接。
发表于 2010-10-14 14:49:07 | 显示全部楼层
我还是觉得不需要多表查询的
你可以用用这个
因为标题、内容、点击次数 可以单表直接搜索到、
按照你全的写法
然后呢。你可以利用你的模型层
模型层里面写这样一个方法
function get_comment_num($post_id)
{
     $sql="select count(*) as cnt
from comment where aid=?";

$this->db->query($sql,array($post_id));
foreach($res->result_array() as $row)
{
   return $row['cnt'];
}
}

之后,你的视图层直接这么来
逐行的搞
foreach($posts as $post)
{
    echo $post->post_id();
    echo $post->post_title();
    echo $post->post_content();
    echo $post->get_comment_num($post->post_id());
   //....and so on
}

这样子用单表就可以搞出来。
发表于 2010-10-15 14:04:27 | 显示全部楼层

求助这样的查询如何写?

你的post id从哪来的?

如果是新闻列表那每条新闻都要单独做一次查询,对吗?在不考虑分页的情况下,你的方案需要做N + 1 次查询。N等于新闻条数。

现在,你觉得多表查询还有必要吗?


- 发送自我的 iPhone 大板凳应用
发表于 2010-10-15 14:50:27 | 显示全部楼层
用了MVC框架之后发现嵌套的SQL语句越来越少了。

本版积分规则