Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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 codeigniter中的mysql查询逻辑_Php_Mysql_Codeigniter - Fatal编程技术网

Php codeigniter中的mysql查询逻辑

Php codeigniter中的mysql查询逻辑,php,mysql,codeigniter,Php,Mysql,Codeigniter,我有两个mysql表memes和投票。下面给出了示例数据 Memes table 投票表 投票=1表示向上投票,投票=0表示向下投票 我想要这样的结果 计算每个记录的上下票数 这是我的代码,仅用于从memes表获取记录 function loadAllMemes($categoryID,$sortby, $page,$perpage) { $data = array(); $this->db->select("*"); $this->db->

我有两个mysql表
memes
投票
。下面给出了示例数据

Memes table

投票表

投票=1表示向上投票,投票=0表示向下投票

我想要这样的结果

计算每个记录的上下票数

这是我的代码,仅用于从
memes
表获取记录

function loadAllMemes($categoryID,$sortby, $page,$perpage)
{
    $data = array();
    $this->db->select("*");
    $this->db->from("memes");
    $this->db->limit($perpage, $page);
    if($categoryID > 0)
    {
        $this->db->where("categoryid",$categoryID);
    }
    if($sortby != "")
    {
        if($sortby == "recently")
        {
            $this->db->order_by("date","DESC");
        }
        else if($sortby == "popular")
        {
            $this->db->order_by("views","DESC");
        }

    }
    $query = $this->db->get();
    return $query->result();
}
任何帮助都将不胜感激。谢谢

select Memes.*, sum(vote) upvote, sum(if(vote = 0, 1, 0)) downvote from memes
join vote on memes.id = memeid 
group by memeid 
这是没有尝试过的。如果有语法错误,请原谅


注意:这完全是在sql中实现的。请做一些必要的事情来转换codeigneter

快速解决方案是使用子查询,尽管我认为这里的join更有效

SELECT
m.id,
m.title,
m.path,
m.date,
m.categoryid,
m.views,
(SELECT COUNT(*) FROM votes WHERE vote = '1' AND memeid = m.id) upvotes,
(SELECT COUNT(*) FROM votes WHERE vote = '0' AND memeid = m.id) downvotes
FROM memes m

对于Mysql,您可以直接将您的条件us sum函数放入其中,这将产生一个布尔值0/1,您可以在查询中使用它,如下所示

SELECT 
m.*, 
SUM(v.vote = 1) upvotes, /* this equal to SUM(CASE WHEN v.vote = 1 THEN 1 ELSE 0 END) */
SUM(v.vote = 0) downvote
FROM memes m
JOIN vote v ON m.id = v.memeid 
GROUP BY m.id
对于活动记录,您可以将上述查询写入

$this->db->select('m.*,SUM(v.vote = 1) upvotes,SUM(v.vote = 0) downvote',FALSE)
        ->from('memes m')
        ->join('vote v','m.id = v.memeid ')
        ->group_by('m.id')
        ->get()
        ->result();

事实上,这就是问题所在。我不能把它转换成codeigniter。