选择MySQL If(ID)In Array

时间:2015-03-19 21:17:09

标签: php mysql codeigniter

所以我尝试构建一个通知系统(CodeIgniter),而不是通过这个唯一的ID将它存储在我的数据库中。现在我使用`SELECT query。

遇到了一些问题

IMG

这也是存储在“value”行中的数组:

[{"id":0,"user_id":"1","comment":"That's a Nice Video.","posttime":1403523177,"status":1},{"id":1,"user_id":"4","comment":"Nice to see this..!!","posttime":1403590409,"status":1}]

这是我的(不工作)查询:

$query = $this->db->get_where('post_meta',array('status'=>1),in_array('user_id', $id));

想法?

注意:通知将由“user_id”构成。

1 个答案:

答案 0 :(得分:1)

你不应该在该函数上使用in_array('user_id', $id),因为它返回boolean。

在有效记录页面上:https://ellislab.com/codeigniter/user-guide/database/active_record.html您可以查看get_where()功能所需的参数

$query = $this->db->get_where('mytable', array('id' => $id), $limit, $offset);

注意第三个参数如何采用 $ limit 来讨论您将收到的数据数量。 (将此留空将返回所有数据)。


一些代码示例:

如果您只想使用status = 1获取数据,请使用以下命令:

$query = $this->db->get_where('post_meta',array('status'=>1));

如果您想使用status = 1user_id = $id获取数据,请使用以下内容:

$this->db->like('value', '"user_id":"'.$id.'"'); 
$query = $this->db->get_where('post_meta',array('status'=>1));

上面的解决方案不是最好的,但它应该有效。 $this->db->like()函数将创建规则以获取value行中的数据,其中"user_id":"$id"其中 $ id 是您定义的值。


如果我想收到所有通知并根据其ID对其进行分组,该怎么办?

我通常会获取所有数据,然后使用PHP将它们分组到自己的数组中。我认为比依靠数据库更便宜(如果我错了就纠正我)。

所以使用第一个代码:

$query = $this->db->get_where('post_meta',array('status'=>1));

然后使用foreach()或您认为方便的任何内容迭代它们。

$data = array();
foreach($query as $k=>$v) {
    // Run a function to get User ID
    $user_id = your_function_here($v->value);

    if(!isset($data[$user_id]))
        $data[$user_id] = array();

    // This is just some example to group them together, you can optimize it to your own liking
    array_push($data[$user_id],$v);
}

your_function_here()是从数据库中的value行获取user_id的函数。