第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用迭代的 MySQL 查詢并形成 json 編碼的結(jié)果?

如何使用迭代的 MySQL 查詢并形成 json 編碼的結(jié)果?

PHP
慕工程0101907 2022-12-23 13:16:30
我在將多個 SQL 執(zhí)行到一個數(shù)組然后顯示為 JSON 數(shù)據(jù)時遇到問題,這是我的代碼:$sql0="SELECT id,              company_id,              class_name       FROM cc_class_room       WHERE company_id='CO191125310002'";$res=$this->db->query($sql0);$data=$res->result_array();$i=0;foreach($data as $row ) {    $sql1="SELECT COUNT(user_id) member FROM cc_class_room_user WHERE class_id='".$row['company_id']."' GROUP BY class_id";    $res1=$this->db->query($sql1);    $responce->rows[$i]['id']=$row['id'];    $responce->rows[$i]['cell']=array("company_id"=>$row['company_id'],"class_name"=>$row['class_name'],"member"=>$row['member']);    $i++;}return json_encode($responce);當(dāng)我這樣做時,我得到了一個錯誤:未定義索引:成員第二個 SQL 無法執(zhí)行,如何在不加入/聯(lián)合 SQL 的情況下對數(shù)組執(zhí)行 sql?這是我想要的顯示 JSON這是一個基于 CodeIgniter 構(gòu)建的應(yīng)用程序。
查看完整描述

2 回答

?
楊__羊羊

TA貢獻1943條經(jīng)驗 獲得超7個贊

您還沒有member從第二個查詢中獲取值。您需要將其提取到不同的數(shù)組中,以便將其添加到輸出數(shù)據(jù)中:


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++;

}   

請注意,您不需要在循環(huán)中使用計數(shù)器,您可以將所有數(shù)據(jù)放在一個數(shù)組中并將其推送到一行中:


$responce[] = array('id' => $row['id'],

                    'cell' => array("company_id" => $row['company_id'],

                                    "class_name"=>$row['class_name'],

                                     "member"=>$row1[0]['member']

                                   )

                    );


查看完整回答
反對 回復(fù) 2022-12-23
?
米琪卡哇伊

TA貢獻1998條經(jīng)驗 獲得超6個贊

我參加聚會遲到了,但這很重要……


關(guān)于您的錯誤,您似乎忘記了像在循環(huán)之前所做的那樣在循環(huán)中聲明結(jié)果集$data。


$res1=$this->db->query($sql1);  // $res1 is never used again!

您可以像這樣將計數(shù)直接寫入您的新數(shù)據(jù)結(jié)構(gòu):


'member' => $res1->getRowArray['member']

當(dāng)您可以一次完成所有工作時,您不應(yīng)該重復(fù)訪問服務(wù)器。您可以在 SELECT 子句中使用子查詢——這將對表進行與在原始腳本中一樣多的單獨查詢,但這是一次性完成的。這是更好的做法,否則您的老師不應(yīng)該告訴您。


此外,由于您是在 CodeIgniter 中編寫應(yīng)用程序腳本,因此您應(yīng)該完全接受活動記錄語法。如果您的傳入company_id值是用戶提供的,那么以下代碼片段實際上可以幫助您編寫穩(wěn)定、安全且可移植的查詢。


帶有子查詢的原始 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 的活動記錄使用子查詢進行選擇:(

我已經(jīng)在本地測試成功/值得信賴)


$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();

我還會說可能有更好的替代查詢可以執(zhí)行,但為了完全自信,我需要訪問您的表架構(gòu)才能運行一些測試。


無論你選擇哪種方式查詢數(shù)據(jù)庫,你的結(jié)果的準(zhǔn)備,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);


查看完整回答
反對 回復(fù) 2022-12-23
  • 2 回答
  • 0 關(guān)注
  • 141 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號