简体   繁体   中英

Select MySQL If (ID) In Array

So I trying to build a notification system (CodeIgniter) and not store it in my database by this unique ID. Now I got some problem to using `SELECT query.

IMG

Also this is array stored in "value" row:

[{"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}]

And this is my (not work) query:

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

Ideas?

Note: Notification will be sparated by "user_id".

You should not use in_array('user_id', $id) on that function because it returns boolean.

On the active record page: https://ellislab.com/codeigniter/user-guide/database/active_record.html you can take a look at parameter it takes for get_where() function

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

Notice how the third parameter takes $limit which talks about the number of data you'll receive. (Leaving this blank will return you all data).


Some code examples:

If you just want to get the data with status = 1 , use the following:

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

If you want to get the data with status = 1 and user_id = $id , use the following:

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

The solution above is not the best, but it should work. The $this->db->like() function will create rules to get data in value row which has "user_id":"$id" where $id is the value that you define.


What if I want to get all notifications and group them based on their ID?

I usually get all the data and then use PHP to group them into its own array. I think it's cheaper than relying on database to do that (Correct me if i'm wrong).

So use the first code:

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

Then iterate them using foreach() or whatever you find convenient.

$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() is your function to get the user_id from value row on your database.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM