Php codeigniter中的mysql查询逻辑
我有两个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->
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。