2 回答

TA貢獻1943條經驗 獲得超7個贊
您還沒有member從第二個查詢中獲取值。您需要將其提取到不同的數組中,以便將其添加到輸出數據中:
foreach($data as $row ) {
$sql1="SELECT COUNT(user_id) member FROM cc_class_room_user WHERE class_id='".$row['company_id']."'";
$res1=$this->db->query($sql1);
$row1=$res1->result_array();
$responce->rows[$i]['id']=$row['id'];
$responce->rows[$i]['cell']=array("company_id"=>$row['company_id'],"class_name"=>$row['class_name'],"member"=>$row1[0]['member']);
$i++;
}
請注意,您不需要在循環中使用計數器,您可以將所有數據放在一個數組中并將其推送到一行中:
$responce[] = array('id' => $row['id'],
'cell' => array("company_id" => $row['company_id'],
"class_name"=>$row['class_name'],
"member"=>$row1[0]['member']
)
);

TA貢獻1998條經驗 獲得超6個贊
我參加聚會遲到了,但這很重要……
關于您的錯誤,您似乎忘記了像在循環之前所做的那樣在循環中聲明結果集$data。
$res1=$this->db->query($sql1); // $res1 is never used again!
您可以像這樣將計數直接寫入您的新數據結構:
'member' => $res1->getRowArray['member']
當您可以一次完成所有工作時,您不應該重復訪問服務器。您可以在 SELECT 子句中使用子查詢——這將對表進行與在原始腳本中一樣多的單獨查詢,但這是一次性完成的。這是更好的做法,否則您的老師不應該告訴您。
此外,由于您是在 CodeIgniter 中編寫應用程序腳本,因此您應該完全接受活動記錄語法。如果您的傳入company_id值是用戶提供的,那么以下代碼片段實際上可以幫助您編寫穩定、安全且可移植的查詢。
帶有子查詢的原始 MySQL SELECT:(db-fiddle.com 演示)
SELECT id,
class_name,
(SELECT COUNT(1)
FROM cc_class_room_user
WHERE class_id = company_id) AS members
FROM cc_class_room
WHERE company_id = 'CO191125310002'
通過 CodeIgniter 的活動記錄使用子查詢進行選擇:(
我已經在本地測試成功/值得信賴)
$companyId = 'CO191125310002';
$subquery = $this->db
->select('COUNT(1)')
->from('cc_class_room_user')
->where('class_id = company_id')
->get_compiled_select();
$resultSet = $this->db
->select("id, class_name, ({$subquery}) AS members")
->from('cc_class_room')
->where('company_id', $companyId)
->get()
->result_array();
我還會說可能有更好的替代查詢可以執行,但為了完全自信,我需要訪問您的表架構才能運行一些測試。
無論你選擇哪種方式查詢數據庫,你的結果的準備,IMO,最干凈的寫法是這樣的:
$results = [];
foreach ($resultSet as $row) {
$results[] = [
'id' => $row['id'],
'cell' => [
'company_id' => $companyId, // no reason to query for what you already know
'class_name' => $row['class_name'],
'members' => $row['members'], // I am using plural because it makes better sense for a counted value
],
];
}
return json_encode(['rows' => $results], JSON_PRETTY_PRINT);
- 2 回答
- 0 關注
- 132 瀏覽
添加回答
舉報