- 我們有一個組表名稱為“組”(有郵件組)
- 我們有一個人表名稱為“人”(郵件組中有人)
我們通過組 ID 使用 json_encode 將人員保存在“person”表中。因為一個人可以屬于多個群體。

問題是我們無法按組獲取“人員”表的行數。我們想要得到一些資訊,比如 X 郵件組有 10 人,Y 郵件組有 5 人等。我們應該通過計算 json 編碼的 sql 行來獲取帶有 id 的資訊。但是如何?我們需要幫助解決這些問題。
我們的準則;
$jsonGroups = $this->db->get("person")->result();
foreach ($jsonGroups as $jsGro) {
$jsGro->personEmailGroup = json_decode($jsGro->personEmailGroup);
if(in_array($group->mailGroupId, $jsGro->personEmailGroup)) {
$this->db->select('*');
$query = $this->db->where('personId', $jsGro->personId)->where('personStatus', 1)->get('person');
$num = $query->num_rows();
if($num>0) {
echo ' ' .$num;
} else {
}
}
}
有了上面的代碼,結果什么都沒有。
提前致謝!
uj5u.com熱心網友回復:
將這種設計與 json 一起用于關系并不是最佳選擇,而是您的選擇。
假設您的 sql server 支持 JSON 函式并且您使用的是 codeigniter 3,這里是使用JSON_CONTAINS函式獲取成員數量的示例方法
$sub_query = $this->db
->select('groups.groupsId,COUNT(*) AS NumberOfPerson')
->join('person',"JSON_CONTAINS(person.personEmailGroup, CONCAT('\"',groups.groupsId,'\"'), '$')")
->group_by('groupsId')
->from('groups')
->get_compiled_select();
$allGroups = $this->db
->select('groups.*, personcounter.NumberOfPerson')
->join("($sub_query) personcounter", "personcounter.groupsId= groups.groupsId","left")
->from('groups')
->get()
->result();
echo '<pre>';
print_r($allGroups );
echo '</pre>';
我建議使用分頁 insead 來獲取所有組。
沒有 JSON_CONTAINS 函式的另一種選擇是檢查每個用戶的組成員身份并對其進行計數。對于大person表使用限制和偏移查詢,直到所有表都被掃描 - 請查看 codeigniter 檔案限制結果
// this are all users - not recomended due to memory leak
$users = $this->db->get("person")->result();
// array with group_id as key and group members as value
// will contains only groups with members
$groups_counter = array();
foreach ($users as $user) {
$user_groups = json_decode($user->personEmailGroup);
foreach($user_groups as $groupId){
if(!isset($groups_counter [$groupId])){
$groups_counter [$groupId] = 1;
} else {
$groups_counter[$groupId] = 1;
}
}
}
此致
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/359572.html
上一篇:使用onclickAJAX呼叫加載Select2陳述句資料
下一篇:我們可以在config/constants.php檔案中觸發一個資料庫查詢來使常量動態化嗎?(PHPCodeignitor)
