循环返回意外结果

时间:2011-08-27 09:19:20

标签: php mysql codeigniter

尝试循环遍历数据库结果集,问题是我知道我只有一行数据,但循环返回5行 这是我的模型中的方法

function get_latest_pheeds() {
     $data = $this->user_keywords($this->ion_auth->user_id);
     $keyword = $data;
     $user_id = $this->ion_auth->user_id;
            foreach($keyword as $key => $word) {

                $q = "SELECT *,COUNT(pheed_comments.comment_id) as comments
                FROM pheeds
                LEFT JOIN pheed_comments ON pheed_comments.P_id=pheeds.pheed_id
                WHERE pheed LIKE '%$word%' OR user_id='$user_id'
                GROUP BY pheeds.pheed_id
                ORDER BY datetime DESC";
                $result = $this->db->query($q);
                $rows[] = $result->result();

            }
            return $rows;
    }

我在做什么呢?

1 个答案:

答案 0 :(得分:1)

这是因为您的查询有一个OR,其中应该有一个AND - 每个查询始终与user_id='$user_id'匹配。

无论如何,这个循环效率很低,我想你想做更像这样的事情:

function get_latest_pheeds() {
    $keywords = $this->user_keywords($this->ion_auth->user_id);
    $q = "SELECT *,COUNT(pheed_comments.comment_id) as comments
          FROM pheeds
          LEFT JOIN pheed_comments ON pheed_comments.P_id=pheeds.pheed_id
          WHERE (pheed LIKE '%".implode("%' OR pheed LIKE '%",$keywords)."%') AND user_id='".$this->ion_auth->user_id."'
          GROUP BY pheeds.pheed_id
          ORDER BY datetime DESC";
    return $this->db->query($q);
}

如果您希望将结果作为数组返回,就像之前一样,您需要循环结果并将每个结果提取到另一个数组的数组键中。我不能在这里做,因为我看不到你的db类...

编辑:轻微修复上述代码......

另一个编辑:另一个修复...