Извлечь строки из базы данных postgres из конкретного значения типа данных JSON - PullRequest
0 голосов
/ 23 января 2019

Привет, у меня проблема с извлечением строк из столбца Json.
Ниже приведены данные json, из которых, если я хочу извлечь строки, скажем, из значения как MH.

Эти данные приведены в каждой строке. Поэтому мне нужен запрос codeigniter, если при запросе MH этого столбца применимости нужно получить строки.
Можете ли вы помочь мне с этим:

Ниже приведены данные JSON: ["AP","AR","AS","BR","CT","GA","GJ","HR","HP","JK","JH","KA","KL","MP","MH","MN","ML","MZ","NL","OR","PB","RJ","SK","TN","TG","TR","UT","UP","WB","AN","CH","DN","DD","DL","LD","PY"]

$this->select('guid, applicability, name, type, description,
        service_type, scheme_type, mini_description, tags, benefit');
        $this->join('schemes_lang_1', 'schemes_lang_1.scheme_id=scheme_1.id', 'left');
$this->where('lang', $lang);
$this->where('status', $status);
$this->where('scheme_1.pp_enabled', 1);
$this->where('scheme_1.applicability', 'MH');
return $this->findAll();

Структура таблицы размещена ниже.

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Ниже приведен запрос строки, и вы можете использовать этот запрос в качестве ссылки и добавить столько условий, сколько хотите

SELECT
  guid, 
  applicability, 
  name, 
  type, 
  description,
  service_type, 
  scheme_type, 
  mini_description, 
  tags, 
  benefit
FROM scheme_1
LEFT JOIN schemes_lang_1 ON schemes_lang_1.scheme_id=scheme_1.id
WHERE
  (scheme_1.applicability)::jsonb ? 'MH';

Также вы можете проверить условие с помощью клавиш json, например, если json похож на это

["company":"AP","Detail":"test"]

используйте (scheme_1.applicability->'company')::jsonb ? 'AP';

IN Codeignitor, вы можете сделать это следующим образом

$this->select('guid, applicability, name, type, description,
service_type, scheme_type, mini_description, tags, benefit');
$this->join('schemes_lang_1', 'schemes_lang_1.scheme_id=scheme_1.id', 'left');
$this->where('lang', $lang);
$this->where('status', $status);
$this->where('scheme_1.pp_enabled', 1);
$this->where('(scheme_1.applicability)::jsonb ? ', 'MH');

return $this->findAll();

ПРИМЕЧАНИЕ. Это гораздо быстрее, чем при использовании цикла, а затем искать по одной записивнутри поля таблицы и циклического поиска может увеличить временную и пространственную сложность кода в 1000 раз.

0 голосов
/ 23 января 2019

посетите приведенный ниже сайт

посетите http://www.postgresqltutorial.com/postgresql-json/

, затем измените код с

$this->select('guid, applicability, name, type, description,
service_type, scheme_type, mini_description, tags, benefit');
$this->join('schemes_lang_1', 'schemes_lang_1.scheme_id=scheme_1.id', 'left');
$this->where('lang', $lang);
$this->where('status', $status);
$this->where('scheme_1.pp_enabled', 1);
$this->where('scheme_1.applicability', 'MH');
return $this->findAll();

на

$query = $this->db->query("YOUR POSTGRES QUERY");

foreach ($query->result_array() as $row)
{
  echo $row['guid'];
  echo $row['applicability'];
  echo $row['name'];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...