所以我尝试构建一个通知系统(CodeIgniter),而不是通过这个唯一的ID将它存储在我的数据库中。现在我使用`SELECT query。
遇到了一些问题
这也是存储在“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”构成。
答案 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 = 1
和user_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的函数。