亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

用于一對多關系改進的 json 數組

用于一對多關系改進的 json 數組

PHP
元芳怎么了 2022-07-02 15:47:47
我有一個包含三個表的數據庫:Lemma          LemmaScrittura        LemmaSignificato-------------  -----------------    ------------------|id         |  | id             |   | id             ||category.  |  | writing_1      |   | meaning_ITA    ||frequency  |  | writing_2      |   | meaning_EN     ||antonym.   |  | id_Headword(FK)|   | id_Headword(FK)|-------------  ------------------   ------------------關系:1 個引理 -> 許多 LemmaScrittura 1 個引理 -> 許多 LemmaSignificato我正在嘗試用 JSON 表示這些表,以將這些信息發送到我的 iOS 應用程序;但我有時間問題。API 這是我用來制作 API 的代碼:讀取.php<?phpheader("Access-Control-Allow-Origin: *");header("Content-Type: application/json; charset=UTF-8");include_once("../objects/lemma.php");include_once("../objects/lemmaScrittura.php");include_once("../config/database.php");$lemmaObj = new Lemma();$stmt = $lemmaObj->read();$num = $stmt->num_rows;$scritturaObj = new LemmaScrittura();if($num > 0){    $lemmaArr = array();    while($row = mysqli_fetch_array($stmt)){        extract($row);        $lemma=array(            "ambitoUso"         =>  $ambito_Uso,            "catGramm"          =>  $cat_Gramm,            "confrontaCon"      =>  $confrontaCon,            "contrario"         =>  $contrario,            "frequenza"         =>  $frequenza,            "kanjiRef"          =>  $kanji_ref,            "noKanjiLemmaID"    =>  $no_Kanji_Lemma_ID,            "subCatGramm"       =>  $sub_cat_Gramm,            "xRef"              =>  $x_ref        );        array_push($lemmaArr, $lemma);    }        // set response code - 200 OK    http_response_code(200);    // show products data in json format    echo json_encode($lemmaArr);database.php 文件是創建與數據庫的連接的文件。要嘗試使用 Postman 的 api,當我調用此 API 時,請求會持續 80-90 毫秒。但如果添加第二個表所有更改。如果我調用這個 API 來獲取第二個表的行,請求會持續 45-50 秒。顯然,如果我還添加第三張表,則持續時間會增加。引理包含 +7300 行,引理包含 +7600 行我的問題是:1)正常嗎?2)如何改進 API 以使請求更快?3)我在本地主機中,如果我在真實服務器上會有所不同嗎?可以更快嗎?
查看完整描述

1 回答

?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

你提出了太多的數據庫請求!使用來自其他表? id_Headword ?(或其他)的索引創建視圖或執行由連接查詢組成的選擇查詢。喜歡 :


SELECT L.*, LS.writing_1 AS ls_writing_1, LS.writing_2 AS ls_writing_2, 

LSG.meaning_ITA AS lsg_meaning_ITA, LSG.meaning_EN AS lsg_meaning_EN 

FROM Lemma AS L 

INNER JOIN LemmaScrittura AS LS

ON(L.id = LS.id_Headword)

INNER JOIN LemmaSignificato AS LSG

ON (L.id = LSG.id_Headword)

您可以用 ? as ? 重命名其他數據表的列。然后你就有了一個有組織的代碼和結果。


如果您想將所有行合二為一,請這樣做(第一個值;第二個值;第三個值;等等):


SELECT L.*, 

GROUP_CONCAT(DISTINCT LS.writing_1 SEPARATOR ";") AS ls_writing_1,

GROUP_CONCAT(DISTINCT LS.writing_2 SEPARATOR ";") AS ls_writing_2,

GROUP_CONCAT(DISTINCT LSG.meaning_ITA SEPARATOR ";") AS lsg_meaning_ITA,

GROUP_CONCAT(DISTINCT LSG.meaning_EN SEPARATOR ";") AS lsg_meaning_EN

FROM Lemma AS L 

LEFT JOIN LemmaScrittura AS LS

ON(L.id = LS.id_Headword)LEFT JOIN LemmaSignificato AS LSG

ON (L.id = LSG.id_Headword)

然后在 PHP 中,您可以輕松恢復所有內容,您只需在它們之間交叉數據即可。(第一行;第二行;等等)


為了降低速度,您可以將所有數據保存在“json”文件中。并將文件數據直接發送到您的 API。然后,如果有任何更改,您將更新文件(使用按鈕、cron 等)。


服務器和本地主機之間可能減慢速度的區別在于帶寬以及用戶請求的數量以及等待服務器響應的數量。所以在本地,它要快得多。


查看完整回答
反對 回復 2022-07-02
  • 1 回答
  • 0 關注
  • 159 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號