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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

php。從結(jié)果表構(gòu)建多維數(shù)組

php。從結(jié)果表構(gòu)建多維數(shù)組

PHP
慕工程0101907 2022-06-11 16:47:38
我有兩個(gè) mysql 表,其中包含學(xué)生和學(xué)??颇浚缦滤荆嚎颇縤d  |  name=================1   |  History2   |  English3   |  Science4   |  Geography學(xué)生id  |  name=================1   |  Sergey2   |  Dmitriy3   |  Vladislav第三個(gè)表在 Student 和 Subjects 表之間建立了多對(duì)多的關(guān)系,并且還具有標(biāo)記列:分?jǐn)?shù)id  |  student_id  |  subject_id  |  mark==========================================1   |      1       |      2       |  32   |      2       |      2       |  53   |      3       |      3       |  44   |      1       |      4       |  55   |      3       |      4       |  36   |      2       |      3       |  47   |      3       |      2       |  38   |      1       |      1       |  4目標(biāo)是構(gòu)建一個(gè)多維數(shù)組,最終如下所示。如果沒(méi)有這樣的學(xué)生和學(xué)科匹配,它必須在“mark”鍵中返回“null”值。所以它應(yīng)該有 3 個(gè)學(xué)生和 4 個(gè)科目的 12 個(gè)元素(3 乘以 4)。我嘗試了這個(gè) sql 查詢(xún),但它不返回具有“null”值的記錄,而是只返回來(lái)自“Marks”表的記錄:SELECT marks.id AS id,    students.name AS student,   marks.mark AS mark,   subjects.name AS subjectFROM students     LEFT OUTER JOIN marks ON students.id = marks.student    LEFT OUTER JOIN subjects ON marks.subject = subject.id所需數(shù)組:Array(    [        "id" => 1,        "student" => "Sergey",        "subject" => "History",        "mark" => 4,    ],    [        "id" => 2,        "student" => "Sergey",        "subject" => "English",        "mark" => 3,    ],    ...    [        "id" => 9,        "student" => "Vladislav",        "subject" => "History",        "mark" => null,    ],    ...    [        "id" => 12,        "student" => "Vladislav",        "subject" => "Geography",        "mark" => 3,    ],)有誰(shuí)知道如何做到這一點(diǎn)?謝謝你,希望你能幫助我。
查看完整描述

3 回答

?
jeck貓

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊

所以它應(yīng)該有 3 個(gè)學(xué)生和 4 個(gè)科目的 12 個(gè)元素(3 乘以 4)。


您在這里要求的是CROSS JOIN學(xué)生和科目之間的關(guān)系,它將為您提供這兩個(gè)表的笛卡爾積。這是重要的部分。通過(guò)交叉連接學(xué)生和科目,您可以獲得所有學(xué)生和所有科目的組合。


然后,您可以使用表格LEFT JOIN的那部分,如下所示:marks


SELECT marks.id AS mark_id, 

   students.name AS student,

   marks.mark AS mark,

   subjects.name AS subject

FROM students CROSS JOIN subjects

   LEFT JOIN marks

      ON students.id = marks.student_id AND marks.subject_id = subjects.id;

請(qǐng)參閱http://sqlfiddle.com/#!9/57ffd8/1上的工作示例


查看完整回答
反對(duì) 回復(fù) 2022-06-11
?
慕尼黑的夜晚無(wú)繁華

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊

我將通過(guò)生成學(xué)生和科目的笛卡爾積來(lái)解決這個(gè)問(wèn)題cross join:這為您提供了學(xué)生和科目的所有可能組合。然后,您可以帶上標(biāo)記left join:


select 

    marks.id as id, 

    students.name as student,

    marks.mark as mark,

    subjects.name as subject

from students 

cross join subjects

left join marks on marks.student_id = students.id and marks.subject_id = subjects.id

DB Fiddle 上的演示:


  編號(hào) | 學(xué)生 | 標(biāo)記 | 主題  

---: | :-------- | ---: | :--------

   1 | 謝爾蓋 | 3 | 英語(yǔ)  

   2 | 德米特里 | 5 | 英語(yǔ)  

   3 | 弗拉迪斯拉夫 | 4 | 科學(xué)  

   4 | 謝爾蓋 | 5 | 地理

   5 | 弗拉迪斯拉夫 | 3 | 地理

   6 | 德米特里 | 4 | 科學(xué)  

   7 | 弗拉迪斯拉夫 | 3 | 英語(yǔ)  

   8 | 謝爾蓋 | 4 | 歷史  

空| 德米特里 | 空| 歷史  

null | 弗拉迪斯拉夫 | 空| 歷史  

null | 謝爾蓋 | 空| 科學(xué)  

null | 德米特里 | 空| 地理


查看完整回答
反對(duì) 回復(fù) 2022-06-11
?
www說(shuō)

TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超8個(gè)贊

閱讀您的帖子后,我對(duì)您的問(wèn)題的看法是,沒(méi)有任何請(qǐng)求可以產(chǎn)生您想要的結(jié)果。

讓我們分析一下表格的語(yǔ)義:

  • Subjects 定義了所有的主題

  • 學(xué)生定義所有學(xué)生

  • 分?jǐn)?shù)記錄學(xué)生在科目中的所有測(cè)試結(jié)果

因此,在您的 MySQL 查詢(xún)中,您要求引擎首先選擇所有現(xiàn)有的學(xué)生

FROM students

然后,您要檢索這些學(xué)生的所有現(xiàn)有分?jǐn)?shù),或者如果學(xué)生根本不存在任何分?jǐn)?shù),則為 null

LEFT OUTER JOIN marks ON students.id = marks.student

請(qǐng)注意,您已經(jīng)在上面編寫(xiě)了marks.student 但定義了marks.student_id,這里假設(shè)錯(cuò)字。

下一步就是訣竅所在。此時(shí),您將得到如下所示的結(jié)果:

id | student   | mark 

=====================

1  | Sergey    | 3

2  | Dmitriy   | 5

注意:出于可讀性目的,我縮短了結(jié)果


您需要的下一步是加入主題表以添加他們的標(biāo)簽。但是像你在這里一樣加入主題表......


LEFT OUTER JOIN subjects ON marks.subject = subject.id

請(qǐng)注意,這里再次假設(shè)拼寫(xiě)錯(cuò)誤,標(biāo)記.主題而不是標(biāo)記.主題_id


... 只會(huì)產(chǎn)生 ID 位于之前通過(guò)加入 Marks 表產(chǎn)生的任何行中的主題的標(biāo)簽。


解決方案 :


我建議您定義一個(gè)表格,記錄任何給定學(xué)生所學(xué)的科目。像這樣的東西:


Attends

id | student_id | subject_id

============================

1  | 1          | 2

2  | 2          | 4

您的請(qǐng)求將如下所示:


SELECT Marks.id AS id,

Students.name AS student,

Marks.mark AS mark,

Subjects.name AS subject

FROM Students 

JOIN Attends ON Students.id = Attends.student_id

JOIN Subjects ON Subjects.id = Attends.subject_id

LEFT JOIN marks ON Marks.subject = Subjects.id

編輯:正如GMB和Mathias-S 所指出的,交叉連接可能更容易,因?yàn)樗恍枰魏涡卤怼?/p>


查看完整回答
反對(duì) 回復(fù) 2022-06-11
  • 3 回答
  • 0 關(guān)注
  • 167 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號(hào)

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