Как выбрать условие по столбцу JSON в MySQL? - PullRequest
0 голосов
/ 02 декабря 2011

Как написать запрос для выбора данных по условию где столбец, имеющий массив JSON?т.е. предположим, что я добавил user_name, user_role в ci_sessions.user_data - это массив JSON.

SELECT *
FROM `ci_sessions` where user_data[user_role]='admin';
                 *********************/\***************

Здесь необходимо разработать условие.Мне требуются данные с именем user_role "admin".

Обновление: чтобы проверить user_role "admin" является основной целью условия "где"user_data->user_role?

Обновление: Это возможно в БД PostgresSQL.

Ответы [ 2 ]

1 голос
/ 02 декабря 2011

Не знаю, что вы там делаете, но вы просто звоните $this->session->userdata('user_role'), и КИ автоматически выбирает, как получить это значение. Если вы установили (и я думаю, что вы это сделали) использование базы данных, запрос будет выполнен автоматически.

Я не понимаю, как вы на самом деле сохранили переменную сеанса, если вы сами выполняете json_encoded () или имеете в виду кодировку, выполняемую CI.

В последнем вы просто:

if($this->session->userdata('user_role') == 'admin')
{
 // do stuff
}

В противном случае, $role = json_decode($this->session->userdata('user_role')); и проверка массива, но я не могу вам здесь особо помочь, поскольку вы не предоставили четкую информацию

0 голосов
/ 13 февраля 2012

Я продолжал ждать этот тип запроса, но мне не удалось это сделать. Вот почему я сделал комбинацию SQL и PHP.

  1. Я получил результаты из всей таблицы ci_sessions.
  2. Затем я проверил результат по полю декодирования массива JSON. И он работает нормально.
SELECT * FROM `ci_sessions`;
foreach ($result as $row) {
            $user_data=$row->user_data;
            foreach (unserialize($user_data) as $k => $v) {
                $final[] = array('key' => $k, 'value' => $v);
                if($k=='user_role' && $v='admin') {
//make array of admin information required to show
                }

            }
        }
...