langziyang 发表于 2010-10-13 12:42:58

求助这样的查询如何写?

请问这样的表如何写:
article表:放的是文章内容
id   titlecontent
1   测试1测试1内容
2   测试2测试2内容

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

aboutarticle表:放的是关于文章的点击次数aid代表文章的id
idaidhits   
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();
    }
}

sonic 发表于 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'];
}

visvoy 发表于 2010-10-14 08:46:13

用无敌的join

zhangcjl 发表于 2010-10-14 09:32:29

本帖最后由 zhangcjl 于 2010-10-15 02:37 编辑

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

saturn 发表于 2010-10-14 14:01:35

假设有两个表a, b。结构分别与你前两个表结构相同。

SELECT a. * , count( b.id )
FROM a
LEFT JOIN b ON a.id = b.aid
GROUP BY b.aid

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

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

特别注意:这里务必要制定成LEFT JOIN,而非默认的INNER JOIN。因为有些文章可能没有任何评论。

sonic 发表于 2010-10-14 14:38:52

标题、内容、评论条数、点击次数 。简单的两表连接。

sonic 发表于 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
}

这样子用单表就可以搞出来。

saturn 发表于 2010-10-15 14:04:27

求助这样的查询如何写?

你的post id从哪来的?

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

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


- 发送自我的 iPhone 大板凳应用

sonic 发表于 2010-10-15 14:50:27

用了MVC框架之后发现嵌套的SQL语句越来越少了。
页: [1]
查看完整版本: 求助这样的查询如何写?