[MIZIK jwe] Doug Lloyd: Nan videyo nou an sou sijè devlopman sou sit wèb ★ nou te mansyone konsèp nan yon baz done yon fwa kèk, dwa? Se konsa, yon baz done ou se pwobableman abitye avèk soti nan di lè l sèvi avèk Microsoft Excel oswa Google tableur. Li nan reyèlman jis yon òganize mete nan tab, ranje, ak kolòn. Apre sa, yon baz done se kote magazen sit entènèt nou an enfòmasyon ki enpòtan pou sit entènèt nou an yo travay byen. Yon fwa ankò, yon egzanp vrèman komen isit la se estoke usernames ak modpas nan yon baz done, ki Se konsa, lè yon itilizatè journaux nan sit entènèt nou an, ka baz done a dwe kontexte yo wè si ki itilizatè ki egziste nan baz done a. Men, si yo ye a, tcheke ki modpas yo kòrèk. Men, si modpas yo ki kòrèk, lè sa a nou ka ba yo tou sa paj yo ap mande. Se konsa, ou ap pwobableman, ankò, yo konnen yo ak lide sa a soti nan Excel oswa Google Tableur. Nou gen baz done, tab, ranje, ak kolòn. Epi sa a, reyèlman sòt nan seri a fondamantal a pann yerarchize isit la. Se konsa, isit la nan yon calcul Excel. Men, si ou te janm louvri sa a oswa yon lòt pwogram menm jan an ou konnen ke sa yo isit la yo se rows-- 1, 2, 3, 4, 5, 6, 7. Sa yo se kolòn. Petèt desann isit la, menm si ou ka pa sèvi ak karakteristik sa a fò anpil much-- Mwen pral rale in-- nou gen ide sa a nan yon fèy. Se konsa, petèt fèy papye sa yo, si Mwen altène retounen ak lide, se tab diferan ki egziste nan baz done m 'yo. Men, si nou kontinye egzanp nan tout wout la, non an nan sa a baz done se Liv 1. Petèt mwen gen Liv 2 ak liv 3. Se konsa, chak dosye Excel se yon baz done, chak fèy se yon tab, ak andedan nan chak tab mwen gen ide sa a nan ranje ak kolòn. Se konsa, ki jan mwen travay ak baz done sa a? Kouman pou mwen jwenn enfòmasyon ki soti nan li? Oke gen nan yon lang yo rele SQL ki mwen anjeneral jis rele Sequel-- epi li vle di pou la Estriktire rekèt Lang. Epi li se yon lang programmation, men li la yon pwogram san patipri limite lang. Li pa byen tankou lòt moun ke nou te travay avèk yo. Men, bi pou yo sa a lang programmation se sijè rechèch yon baz done, nan mande enfòmasyon nan yon baz done, jwenn enfòmasyon nan yon baz done, ak sou sa. Nou menm tou nou, nan CS50-- ak li nan yon trè platfòm ki komen yo, sa yo rele miskl. Sa a ki sa nou itilize nan kou a. Se yon sous louvri platfòm ki etabli yon sa yo rele relasyon database-- yon baz done, efektivman. Nou pa bezwen jwenn an twòp detay sou sa ki yon baz done relasyon se. Men, lang nan SQL se trè abil nan travay ak miskl ak lòt menm jan an diferan estil pou baz done relasyon. Ak enstalasyon anpil nan Miskl vini ak yon bagay rele fpmyadmen, ki se yon itilizatè grafik interface-- yon GUI-- ki fè li yon ti kras pi plis itilizatè zanmitay al touye queries baz done, paske baz done yo pa jis itilize pa pwogramasyon avanse, dwa? Pafwa gen sa yo ti biznis yo, epi yo pa kapab peye anboche yon ekip nan pwogramasyon, men yo toujou bezwen nan magazen enfòmasyon ki nan yon baz done. Yon bagay tankou fpmyadmen fè li trè fasil pou yon moun ki moun ki nan pa janm pwograme anvan yo ranmase ak vin abitye ak ki jan yo travay avèk yon baz done. Pwoblèm lan se, fpmyadmen, pandan y ap li nan yon zouti kokenn pou aprantisaj sou baz done, li se manyèl. W ap ale nan gen yo ale nan li epi li egzekite kòmandman ak kalite bagay sa yo nan manyèlman. E kòm nou konnen soti nan nou an egzanp sou pwogram entènèt PHP, gen a manuelman fè bagay sa yo sou sit entènèt nou an, si nou vle yon dinamik, aktif reponn sit entènèt, petèt pa apwòch la pi byen. Nou ta renmen jwenn yon fason yo petèt otomatize sa a yon jan kanmenm. Apre sa, SQL ap pèmèt nou fè sa. Se konsa, lè nou ap ale nan kòmanse travay ak SQL, nou premye bezwen gen yon baz done yo travay avèk. Kreye yon baz done se yon bagay ou pwobableman pral fè nan fpmyadmen, paske ou pral sèlman bezwen fè l 'yon fwa, ak sentaks la pou fè sa se yon anpil plis senp. Li se yon anpil pi fasil fè li nan yon koòdone itilizatè grafik pase sezisman li soti kòm yon lòd. Yo lòd, ki ka jwenn yon ti kras ankonbran. Menm jan an tou, kreye yon tab kapab jwenn byen yon ti jan ankonbran kòm byen. Se konsa, bagay sa yo tankou kreye yon baz done ak kreye yon tab, ki w ap pwobableman sèlman pral fè once-- yon fwa pou chak tab, yon fwa pou chak database-- li a OK yo fè sa nan yon koòdone grafik. Nan pwosesis la nan kreye yon tab, ou pral yo te genyen tou ou presize tout nan la kolòn ki pral nan ki tab. Ki sa ki sòt de enfòmasyon fè ou vle nan magazen nan tablo a? Petèt non yon itilizatè a ak dat nesans, modpas, nimewo ID itilizatè, e petèt vil la ak eta a, dwa? Se pou chak fwa nou vle ajoute yon itilizatè nan baz done a, nou vle jwenn tout sis nan tout sa yo moso nan enfòmasyon. Apre sa, nou fè sa lè yo ajoute ranje sou tab la. Se konsa, nou premye kreye yon baz done, lè sa a nou kreye yon tab. Kòm yon pati nan kreye pi yon tab, nou yo mande ou presize chak kolòn ki nou ta renmen nan tablo sa a. Lè sa a, jan nou kòmanse ajoute enfòmasyon nan baz done a ak sijè rechèch baz done a pi generally-- pa sèlman pandan l ajoute, men tout lòt bagay nou do-- nou pral fè fas ak ranje nan tablo a, ki se youn enfòmasyon itilizatè a soti nan seri a tout antye. Se konsa, chak kolòn SQL se kapab nan kenbe done nan yon kalite done an patikilye. Se konsa, nou sòt de elimine sa a lide sou kalite done nan PHP, men yo ap tounen isit la nan SQL. Apre sa, gen nan yon anpil nan kalite done. Isit la nan jis 20 nan yo, men li nan pa menm tout nan yo. Se konsa, nou gen lide tankou INTs-- Integers-- nou pwobableman konnen ki kolòn sa a ka kenbe nonm antye relatif. E genyen anpil varyasyon thereon-- SMALLINT, TINYINT, MEDIUMINT, bigen. Petèt nou pa toujou bezwen kat mòde. Petèt nou bezwen uit bytes, epi pou nou ka itilize sa yo sou nonm antye relatif varyasyon yo dwe yon ti jan pi plis espas efikas. Nou ka fè nimewo desimal, nou kapab fè nimewo pwen k ap flote. Sa yo se bèl menm jan an. Gen kèk diferans ki genyen, epi si ou ta renmen gade moute nan SQL sòt de gid, ou ka wè sa ki ti tay nan diferans yo ant yo. Petèt nou vle nan magazen enfòmasyon sou dat ak lè. Petèt nou ap kenbe tras nan lè itilizatè a ansanm sit entènèt nou an, e konsa petèt nou vle gen yon kolòn sa a, se yon tan dat oswa yon timestamp ki endike lè itilizatè a aktyèlman siyen li. Nou ka fè jeyometri ak linestrings. Sa a se aktyèlman trè fre. Nou te kapab kat jeyografik soti yon géographique zòn lè l sèvi avèk GIS kowòdone trase soti yon zòn nan. Se konsa, ka aktyèlman magazen ki sòt nan enfòmasyon nan yon kolòn SQL. Tèks se jis tach jeyan nan tèks, petèt. ENUMs yo se kalite ki enteresan. Yo aktyèlman egziste nan C. Nou pa fè sa pale de yo paske yo pa ap fò anpil souvan itilize, omwen CS50. Men, li la yon done enimere kalite, ki se kapab nan kenbe valè limite. Yon reyèlman bon egzanp isit la ta dwe yo kreye yon anom kote sèt nan valè posib yo Dimanch, Lendi, Madi, Mèkredi, Jedi, Vandredi, Samdi, dwa? Sa Jou kalite done nan Semèn pa egziste, men nou te kapab kreye yon enimere kalite done sa yo ke ki kolòn ka sèlman janm kenbe yonn nan sèt valè moun posib. Nou te enimere tout nan valè yo posib. Lè sa a, nou gen CHAR ak Varchar, ak mwen te koulè sa yo vèt paske nou ap aktyèlman pral pran yon dezyèm pale sou diferans ki genyen ant de bagay sa yo. Se konsa, CHAR, kontrèman ak C kote CHAR te yon karaktè sèl, nan SQL yon CHAR refere a yon longè fiks fisèl. Lè nou kreye sa a kolòn, nou aktyèlman ka presize longè a nan fisèl la. Se konsa, nan egzanp sa a, nou ta ka di CHAR (10). Sa vle di ke chak eleman nan ki kolòn pral konpoze de 10 bytes nan enfòmasyon. Pa plis, pa mwens. Se konsa, si nou eseye, li mete nan yon 15 ti jan oswa yon eleman 15 pèsonaj oswa valè nan kolòn sa a, nou ap sèlman jwenn 10 a an premye. Si nou mete nan de a pèsonaj valè lontan, nou ap ale nan gen de nan karaktè, ak Lè sa a uit mòde nil. Nou pa janm pral pi efikas pase sa. Yon varchar se kalite tankou nosyon nou an nan yon fisèl ke nou ap abitye ak soti nan C oswa soti nan PHP. Li se yon longè varyab fisèl. Men, lè ou kreye kolòn sa a, ou jis presize maksimòm longè yo posib. Se konsa, petèt 99, oswa souvan 255. Ki ta ka longè a maksimòm. Se konsa, si nou te estoke 15 fisèl karaktè, nou ta sèvi ak 15 bytes, petèt 16 bytes pou Terminator a nil. Si nou te estoke yon twa fisèl karaktè, nou ta sèvi ak twa oswa kat bytes. Men, nou pa ta sèvi ak 99 an plen. Se konsa, poukisa nou ta gen tou de? Bon, si nou bezwen konnen ki jan lontan yon bagay ki ak yon varchar, nou dwe kalite repekte atravè li jis renmen nou te fè nan C ak figi konnen ki kote li sispann. Lè nou konsidere ke si nou konnen ke tout bagay nan kolòn sa a se 10 bytes, petèt nou konnen enfòmasyon sa a, nou ka sote 10 bytes, 10 bytes, 10 bytes, 10 bytes, ak toujou jwenn nan kòmanse nan fisèl la. Se konsa, nou ka gen kèk gaspiye espas ki gen yon CHAR, men petèt gen nan yon komès koupe nan li te gen pi bon vitès nan navige baz done a. Men, petèt nou vle a fleksibilite nan yon varchar olye pou yo having-- Si CHAR nou an te 255, men pi fò nan itilizatè nou an te sèlman Anthrax twa oswa kat bytes yon valè de enfòmasyon oswa twa oswa kat karaktè yon valè de enfòmasyon. Men, gen kèk itilizatè yo te lè l sèvi avèk 255 nan tout antye, petèt Varchar ta gen plis ki apwopriye a. Li nan sòt de yon komès koupe, epi jeneralman pou rezon nan CS50, ou pa bezwen enkyete twòp sou si ou sèvi ak yon CHAR oswa yon varchar. Men, nan mond reyèl la, bagay sa yo gen pwoblèm paske tout nan kolòn sa yo Leve kanpe, pran espas aktyèl fizik. Ak espas fizik, nan la mond reyèl, vini nan yon prim. Se konsa, yon lòt konsiderasyon lè w ap bati yon tab se ranmase yon kolòn yo dwe sa ki rele yon kle prensipal. Apre sa, yon kle prensipal se yon kolòn kote chak valè sèl se inik. Lè sa vle di ke ou ka byen fasil chwazi soti yon sèl ranje jis pa gade a kle nan prensipal nan ki ranje. Se konsa, pou egzanp, ou jeneralman, ak itilizatè yo, pa vle de itilizatè ki gen nimewo a ID itilizatè menm. Se konsa, petèt ou gen anpil nan enfòmasyon, e petèt de itilizatè kapab gen menm name-- nan ou gen John Smith ak Jan Smith. Sa a pa nesesèman yon pwoblèm, paske gen plizyè moun ki nan mond lan yo te rele John Smith. Men, nou sèlman gen yon sèl nimewo ID itilizatè 10, yon sèl itilizatè ID Nimewo 11, 12, 13. Nou pa gen de itilizatè ak menm nimewo a, e konsa petèt nimewo ID itilizatè ta dwe yon bon kle prensipal. Nou pa gen okenn repetisyon, epi nou kapab kounye a inikman idantifye chak yon sèl ranje jis pa gade nan ki kolòn. Chwazi kle prensipal ka aktyèlman fè operasyon tab ki vin apre yon anpil pi fasil paske ou ka ogmante lefèt ke sèten ranje pral dwe inik, oswa yon sèten kolòn nan baz done ou a oswa tab yo pral inik yo chwazi soti ranje patikilye. Ou ka gen tou yon prensipal jwenti kle, ki ou ka jwenn okazyon yo sèvi ak, ki se jis yon konbinezon de de kolòn ki se garanti yo dwe inik. Se konsa, petèt ou gen youn kolòn sa a, se tankou e B, yon kolòn sa a, se yon sèl, de, ak twa, men ou pral sèlman janm gen yon sèl A1, se yon sèl A2, ak sou sa ak sou sa. Men, ou ta ka gen yon B2, se yon C2, oswa yon A1, A2, A3, A4. Se konsa, ou ta ka gen plizyè Kòm, plizyè B, yo menm miltip, miltip Dezan, men ou ka sèlman janm gen yon sèl A1, B2, C3, ak sou sa. Se konsa, jan mwen te di, SQL se yon lang programmation, men li gen yon vokabilè san patipri limite. Li pa byen kòm awogan kòm C ak PHP ak lòt lang ke nou pale nan kou a. Li se pi plis sil yon lang pase sa nou ap pwal pale osijè nan sa a videyo, paske se nan videyo sa a nou ap ale nan pale sou kat operasyon ke nou ka fè sou yon tab. Gen plis pase sa a. Nou ka fè plis pase sa a, men pou rezon nou an, nou ap jeneralman ale nan lè l sèvi avèk jis kat insert operations--, chwazi, aktyalizasyon, ak efase. Epi ou ka pwobableman devine entwitif sa ki tout kat nan bagay sa yo fè. Men, nou pral ale nan yon ti jan nan detay pou chak kesyon. Se konsa, pou rezon sa a videyo, se pou yo asime nou te de bagay sa yo tab nan yon baz done sèl. Nou gen yon tab rele Itilizatè yo ki gen kat columns-- nimewo ID, non itilizatè, modpas, ak tout non. Epi nou gen yon dezyèm tab nan baz done a menm rele manman ki jis estoke enfòmasyon sou yon non itilizatè ak yon manman. Se konsa, pou tout moun nan egzanp nan videyo sa a, nou pral lè l sèvi avèk baz done sa a epi dènye ki vin apre a li. Se konsa nou di nou vle ajoute enfòmasyon nan yon tab. Sa a ki sa insert operasyon an fè. Nan eksplike tout nan kòmandman sa yo, mwen pral l 'ban nou yon skelèt jeneral yo sèvi ak. Paske fondamantalman, demann yo yo ale gade bèl menm jan an, nou ap jis pral yo dwe chanje moso ti kras diferan nan enfòmasyon fè bagay sa yo diferan ak tab la. Se konsa, pou INSERT, kilè eskèlèt la sanble kalite tankou sa a. Nou vle insert nan yon tab an patikilye. Lè sa a, nou gen yon parantèz louvri ak yon lis nan kolòn ke nou vle mete valè nan. Parantèz fèmen, nan yo valè, ak Lè sa a ankò, nou lis soti valè yo nou vle mete nan tab la. Se konsa, yon egzanp sou sa a ta dwe sa ki annapre yo. Mwen vle insert nan tab la itilizatè columns-- ki anba la a non itilizatè, modpas, ak fullname. Se konsa, yon nouvo ranje kote mwen mete nan sa yo twa kolòn ak nou ap ale nan mete nan valè yo Newman, USMAIL, ak Newman. Se konsa, nan ka sa a, mwen se mete NEWMAN nan miniskil nan kolòn nan non itilizatè, modpas la USMAIL, ak tout N Non kapital la Newman nan kolòn nan fullname. Se konsa, isit la nan sa baz done a te sanble ak anvan. Men sa tab la itilizatè sou la tèt te sanble ak anvan nou te fè sa. Apre nou egzekite sa a query, nou jwenn sa a. Nou te ajoute yon nouvo ranje sou tab la. Men, remake bagay sa a yon sèl ke mwen pa te spesifye, men yon jan kanmenm mwen te gen yon valè pou, ki se sa a 12 isit la menm. Mwen pa t 'di mwen te vle mete nimewo ID nan la. Mwen te vle mete non itilizatè, modpas, fullname. Apre sa, mwen te fè sa, sa se amann. Men, mwen menm mwen te te resevwa sa a 12. Poukisa mwen jwenn sa a 12? Oke, li sanble ke lè w ap defini yon kolòn ki a pwal ou prensipal kle, ki se nòmalman, tankou mwen te di, yon nimewo ID. Li pa toujou nesesèman pral fè yon nimewo ID, men li la anjeneral yon bon lide yo gen kèk sòt de valè nonb antye relatif. Ou gen yon opsyon nan fpmyadmen lè w ap kreye baz done ou oswa tab ou yo mete ki kolòn kòm incrementing oto. Ki se yon vrèman bon lide lè w ap travay ak yon kle prensipal, paske ou vle chak valè nan ki kolòn yo dwe inik. Men, si ou ta bliye ou presize li pou plis pase yon sèl moun, ou kounye a gen yon sitiyasyon kote ki kolòn nan pa gen pi long inik. Ou gen de espas vid, kidonk, ou ka pa gen okenn ankò inikman idantifye yon column-- oswa ou kapab pa gen okenn ankò inikman idantifye yon ranje ki baze sou ki kolòn. Li nan pèdi tout nan li yo valè kòm yon kle prensipal. Se konsa, aparamman sa mwen te fè isit la se configuré ID nan itilizatè kolòn enkreman oto pou ke chak fwa mwen ajoute enfòmasyon sou tab la, li pral otomatikman ban m ' se yon valè pou kle a prensipal. Se konsa, mwen ka pa janm bliye fè li paske baz done a pral fè li pou mwen. Se konsa, sa a, se kalite bèl. Se konsa, Se poutèt sa nou jwenn 12 nan la, paske mwen te mete ki kolòn jiska enkreman oto. Si m 'te ajoute yon lòt moun li ta dwe 13, si mwen te ajoute yon moun lòt bagay li ta dwe 14, ak sou sa. Se konsa an n jis fè yon sèl plis ensèsyon. Nou pral insert nan tab la manman, nan patikilye, non itilizatè a ak manman kolòn, valè yo Kramer ak Babs Kramer. Se konsa, nou te gen sa a anvan. Apre nou egzekite ki Rechèch SQL, nou gen sa a. Nou te ajoute Kramer ak Babs Kramer sou tab la manman. Se konsa, ki nan mete. Chwazi a se sa nou itilize yo ekstrè enfòmasyon ki soti nan tab la. Se konsa, sa a se ki jan nou jwenn enfòmasyon soti nan baz done a. Ak kòmandman pou chwazi yo pral yo dwe itilize trè souvan nan pwogram. Jeneral la framework-- nan kilè eskèlèt jeneral sanble tankou sa a. Chwazi yon seri kolòn soti nan yon tab, ak Lè sa a opsyonèlman ou ka presize yon condition-- oswa sa nou tipikman rele yon suppose, se nòmalman tèm nan nou itilize nan SQL. Men, li la fondamantalman sa ranje patikilye ou vle jwenn. Si ou vle, olye pou yo ap resevwa tout bagay, etwat li desann, sa a se kote ou ta fè sa. Lè sa a, opsyonèlman, ou kapab tou lòd pa yon kolòn patikilye. Se konsa, petèt ou vle gen bagay Ranje par ki baze sou yon kolòn oswa par ki baze sou yon lòt. Yon fwa ankò, KI KOTE ak LÒD BY yo se si ou vle. Men, yo ap pwobableman gen useful-- patikilyèman KI KOTE yo pral itil nan etwat desann konsa ou pa fè sa jwenn tout baz done ou retounen lakay yo epi gen nan pwosesis li, ou jis jwenn moso yo nan li ke ou pran swen sou. Se konsa, pou egzanp, mwen ta ka vle chwazi Nimewo ID ak fullname soti nan itilizatè. Se konsa, sa sa a ta ka sanble? Se konsa, isit la nan tab itilizatè m 'yo. Mwen vle chwazi idnum ak fullname soti nan itilizatè. Kisa mwen pral jwenn? Mwen pral jwenn sa a. Mwen pa t 'ti kras li desann, se konsa mwen ap resevwa nimewo a pou chak ranje ID ak mwen ap resevwa plen nan non soti nan tout ranje. OK. E si mwen vle chwazi modpas soti nan itilizatè WHERE-- se konsa kounye a Mwen ajoute yon kondisyon, yon predicate-- kote idnum se mwens pase 12. Se konsa, isit la nan baz done m 'ankò, mwen tab itilizatè tèt la. Kisa mwen pral jwenn si mwen vle chwazi enfòmasyon sa a, modpas la, kote ID itilizatè oswa idnum se mwens pase 12? Mwen pral jwenn sa a enfòmasyon tounen, dwa? Sa rive ke idnum se 10, mwens pase 12, nimewo ID 11 mwens pase 12. Mwen ap resevwa modpas la pou moun ranje. Sa a ki sa mwen te mande pou. Ki sa ki sou sa a? E si mwen vle chwazi zetwal soti nan la manman tab kote non itilizatè egal Jerry? OK, chwazi zetwal se espesyal nan sòt de kat nan bwa sa yo rele ke nou itilize yo ka resevwa tout bagay. Se konsa, yo ap di chwazi non itilizatè manman vigil, ki te rive yo dwe sèlman nan de kolòn nan tablo sa a, Mwen kapab jis chwazi zetwal epi pou yo jwenn tout bagay kote non itilizatè a egal Jerry. Se konsa, se sa ki mwen ta jwenn si mwen te fè ki query patikilye. Koulye a, baz done yo gwo paske yo pèmèt nou òganize enfòmasyon petèt yon ti jan pi plis efikasite pase nou ta ka otreman. Nou pa nesesèman nan magazen chak moso enpòtan nan enfòmasyon sou yon itilizatè nan tablo a menm. Nou te gen de tab la. Nou bezwen nan magazen Manman tout moun nan la, e petèt nou pa gen sekirite sosyal nimewo, nou gen dat yo nan nesans. Sa pa toujou bezwen yo dwe nan tablo a menm. Osi lontan ke nou ka defini relasyon ant tables-- nan e ke sa a kote ki relasyon tèm baz done kalite vini nan play-- osi lontan ke nou ka defini relasyon ant tab yo, nou ka sòt de konpartimante oswa bagay sa yo abstrè yon fason, kote nou gen nan sèlman enfòmasyon vrèman enpòtan nou pran swen sou nan tablo itilizatè a la. Lè sa a, nou gen enfòmasyon Segondè oswa enfòmasyon siplemantè nan lòt tab ke nou ka konekte tounen nan prensipal la itilizatè tab nan yon fason patikilye. Se konsa, isit la nou gen de moso wòch plat sa yo, men gen nan yon relasyon ant yo, dwa? Li sanble tankou non itilizatè ta kapab yon bagay ki egziste nan komen ant de tab sa yo diferan. Se konsa, sa si nou genyen kounye a yon sitiyasyon kote nou vle jwenn tout non yon itilizatè a soti nan tab itilizatè a, ak manman yo nan non nan tablo a manman? Nou pa gen yon fason jwenn ki kòm li vle di, dwa? Gen nan pa gen tab sèl ki gen tou de tout non ak non manman an. Nou pa gen opsyon sa a soti nan sa ki nou te wè byen lwen tèlman. Se konsa, nou gen prezante lide a nan yon rantre nan. Apre sa, kontre ak yo se pwobableman complex-- ki pi li vrèman pi operasyon konplèks nou ap ale nan pale sou nan videyo a. Yo ap yon ti kras konplike, men yon fwa ou jwenn pann an nan li, yo ap aktyèlman pa twò move. Se jis nan yon ka espesyal nan yon chwazi. Nou pral chwazi yon seri kolòn ki sòti nan yon tab rantre nan nan yon dezyèm tab sou kèk suppose. Nan ka sa a, panse sou li renmen sa a men tab se yon sèl yon sèl ti sèk sou isit la, tab de se yon lòt sèk sou isit la. Apre sa, pati sa a suppose nan mitan an, li nan sòt de tankou si ou panse sou kòm yon dyagram Venn, ki sa yo gen an komen? Nou vle fè rapò ant de tab sa yo ki baze sou sa yo genyen an komen ak kreye tab ipotetik sa a ki se fizyon an nan de a ansanm. Se konsa, nou pral wè sa a nan yon egzanp e petèt ki pral ede klè l 'kanpe yon ti kras. Se konsa, petèt ou vle chwazi user.fullname ak moms.mother soti nan itilizatè rantre nan nan nan manman tab nan chak sitiyasyon kote non itilizatè kolòn nan se menm bagay la ant yo. Lè sa a se yon nouvo Sentaks isit la, itilizatè sa a. ak manman .. Si m ap fè plizyè tab ansanm, mwen kapab presize yon tab. Mwen kapab fè distenksyon ant nan sou patikilye ke sou nan pati anba a anpil la. Mwen kapab fè distenksyon ant non itilizatè a kolòn nan tablo a itilizatè soti nan kolòn nan non itilizatè a nan manman tab yo, ki se otherwise-- si nou jis di non itilizatè egal non itilizatè, ki fè pa reyèlman vle di anyen. Nou vle fè l 'kote yo matche. Se konsa, mwen ka presize tab la ak nan Non kolòn nan ka ta gen yon sitiyasyon kote li ta klè sa m ap pale de. Se konsa, ki nan tout m ap fè gen mwen se li di sa a kolòn nan tablo sa a, epi yo te trè eksplisit. Se konsa, ankò, mwen chwazi a tout non ak non manman an soti bò tab la itilizatè lye ansanm ak tab la manman nan tout sitiyasyon kote yo pataje ke column-- yo pataje ki nosyon non itilizatè. Se konsa, isit la yo se tab yo nou te gen anvan. Sa a se eta a nan nou an baz done kòm li egziste kounye a. Enfòmasyon ki nou ap èkstraksyon se sa a yo kòmanse avèk yo. Sa a se tab la nouvo nou ap ale yo kreye konbine sa yo ansanm. Apre sa, remake nou pa ap en Ranje Newman nan nan tablo itilizatè a la, epi nou pa ap en Ranje Kramer nan nan tablo a manman paske ni youn egziste nan tou de sets-- nan tou de tab. Enfòmasyon an sèlman se sa ki an komen ant yo se Jerry se nan tou de tab ak gcostanza se nan tou de tab. Se konsa, lè nou fè SQL an rantre nan, ki sa nou get-- epi nou fè aktyèlman jwenn sa a. Li nan sòt de yon varyab tanporè. Se tankou yon ipotetik fizyon nan de ròch yo. Nou aktyèlman jwenn yon bagay tankou sa a, kote nou te fizyone ansanm tab yo sou mòn lan enfòmasyon ke yo gen an komen. Se konsa, remake ke users.username ak kolòn moms.username, li nan ekzakteman menm bagay la. Sa ki te enfòmasyon an ki te konsistan soti nan itilizatè yo tab ak tab la manman. Se konsa, nou fizyone yo ansanm. Nou abandone Kramer paske li pa t egziste nan tablo a itilizatè yo, epi nou abandone Newman, paske li pa t 'egziste nan tab la manman. Se konsa, sa a se fizyon an ipotetik lè l sèvi avèk operasyon an nan rantre nan chwazi. Lè sa a, nou te kap chèche nan tout non itilizatè a ak manman kap itilize li an a, ak kidonk sa a se enfòmasyon an ki nou ta jwenn nan rechèch la an jeneral ke nou te fè ak chwazi. Se konsa, nou mete tab yo ansanm epi nou extrait sa yo de kolòn, e konsa se sa ki nou ta jwenn. Men, SQL kontre ak yon kalite konplike. Ou pwobableman pa pral fè yo twòp, men jis gen kèk lide sou kilè eskèlèt la ke ou ta ka itilize yo rantre de tab ansanm si ou bezwen. De dènye a se yon ti jan ki pi senp mwen te pwomèt. Se konsa, à, nou ka sèvi ak MIZAJOU chanje enfòmasyon ki nan yon tab. Fòma a jeneral se MIZAJOU kèk tab, mete kèk kolòn nan kèk valè Kote kèk suppose se satisfè. Se konsa, pou egzanp, nou ta ka vle mete ajou tab la itilizatè , li mete modpas la Yada Yada, kote nimewo a ID se 10. Se konsa, nan ka sa a, nou ap à tab la itilizatè. Nimewo a se 10 pou ID ki premye ranje a, epi nou vle mete ajou nan modpas yo Yada Yada. Se konsa, sa a, se sa ki ta rive. Li trè senp, dwa? Se jis nan yon trè senp modifikasyon sou tab la. Efase se operasyon an nou itilize yo retire enfòmasyon ki soti nan yon tab. Efase nan tablo KI KOTE kèk suppose se satisfè. Nou vle efase ki soti nan itilizatè tab pou egzanp kote non itilizatè a se Newman. Ou ka pwobableman devine kisa k ap pase yo rive isit la apre nou egzekite ki SQL rechèch, Newman se ale nan tab la. Se konsa, tout operasyon sa yo, jan mwen te di, yo trè fasil fè nan fpmyadmen. Li se yon trè itilizatè zanmitay koòdone. Men, li mande pou efò manyèl. Nou pa vle anplwaye efò manyèl. Nou vle pwogram nou yo fè sa pou nou, dwa? Se konsa, nou ta ka vle fè sa a pwogramasyon. Nou vle enkòpore SQL epi yo gen yon lòt bagay yo fè sa pou nou. Men, sa ki te nou wè ki pèmèt nou pwogramasyon fè yon bagay? Nou te wè PHP, dwa? Li entwodui kèk dynamism nan pwogram nou yo. Se konsa, erezman, SQL ak PHP jwe trè joliman ansanm. Genyen yon fonksyon nan PHP rele query, sa ki ka dwe itilize. Epi ou ka pase kòm nan paramèt oswa agiman an sijè rechèch yon sijè rechèch SQL ki ou ta renmen egzekite. Apre sa, PHP pral fè li sou non ou. Se konsa, apre ou te konekte nan baz done ou a ak PHP, gen nan de eleksyon primè ou fè sa. Genyen yon bagay yo rele miskli ak yon bagay yo rele apelasyon. Nou pa pral antre nan yon gwo kantite lajan detay la. Nan CS50 nou itilize apelasyon. Apre ou te konekte nan baz done ou a, ou ka Lè sa a fè demann baz done ou pa pase yo kòm agiman queries nan fonksyon PHP. Men, lè ou fè sa, ou sere nan rezilta mete nan yon etalaj asosyatif. E nou konnen ki jan yo travay avèk ranje asosyatif nan PHP. Se konsa, mwen ta ka di yon bagay tankou sa a men $ results-- sa a se nan PHP-- egal query. Lè sa a, andedan nan la fonksyon query ke agiman ke mwen pase sijè rechèch ki sanble ak SQL. Lè an reyalite se sa ki SQL. Sa a fisèl la ke mwen ta query renmen al touye sou baz done m 'yo. Se konsa, nan wouj, sa a se PHP. Sa a se ke mwen se SQL entegre nan PHP pa fè li agiman an nan fonksyon an sijè rechèch. Mwen vle chwazi soti nan fullname itilizatè ki kote nimewo ID egal 10. Lè sa a, petèt apre mwen te fè sa, Mwen ta ka di yon bagay tankou sa a. Mwen vle enprime soti nan mesaj Mèsi pou ouvri sesyon an. Apre sa, mwen vle li interpolate-- mwen vle entèpole $ rezilta fullname. Se konsa, sa a, se ki jan mwen travay ak sa asosyatif etalaj ke mwen te resevwa tounen. $ rezilta fullname ta fondamantalman fini enprime soti, mèsi pou antre nan, Jerry Seinfeld. Non an plen Sa ki te kote idnum egal 10. Se konsa, tout m ap fè se mwen now-- mwen ki estoke query mwen, rezilta yo nan rechèch mwen an ak rezilta nan yon etalaj asosyatif, ak fullname se non an nan kolòn nan mwen te resevwa pou. Se konsa, sa a, se kle m 'nan rezilta yo asosyatif etalaj ke mwen vle. Se konsa, mèsi pou antre nan, $ rezilta, fullname pral enprime soti, pral bwa dwa nan ant moun Curly aparèy òtopedik, Jerry Seinfeld. Apre sa, mwen pral renmen enprime soti mesaj la Mèsi pou antre nan Jerry Seinfeld. Koulye a, nou pwobableman pa vle di bagay Kòd tankou sa nan, dwa? Nou ta ka vle fè yon bagay tankou ekri an lèt detache f, kote nou ka ranplase e petèt kolekte diferan enfòmasyon, oswa petèt gen pwosesis la query enfòmasyon diferan. Se konsa, sijè rechèch, fonksyon an sijè rechèch gen sa a nosyon nan sòt de sibstitisyon trè menm jan ak enprime f pousan nan ak pousan c, se mak kesyon. Apre sa, nou ka sèvi ak kesyon mak trè Analoji ekri ak lèt ​​detache f varyab ranplasan. Se konsa, petèt itilizatè ou louvri sesyon an pi bonè, epi ou sove nimewo ID itilizatè yo nan $ _SESSION nan PHP super mondyal nan ID a kle. Se konsa, petèt apre yo louvri sesyon an, ou mete $ _SESSION ID egal 10, èkstrapolan soti nan egzanp lan nou jis te wè yon dezyèm de sa. Se konsa, lè nou aktyèlman egzekite sa a sijè rechèch rezilta yo kounye a, li ta ploge nan 10, oswa kèlkeswa sa valè nan ID $ _SESSION se. Se konsa, ki pèmèt nou gen yon ti jan pi plis dinamik. Nou ap pa difisil kodaj bagay sa yo nan ankò. Nou ap ekonomize enfòmasyon yon kote ak Lè sa a nou ka sèvi ak enfòmasyon ki ankò nan sòt de jeneralizasyon sa nou vle fè a, ak jis ploge nan ak chanjman konpòtman an nan paj nou an ki baze sou sa nimewo ID itilizatè a aktyèlman se apre yo te louvri sesyon an. Li la tou posib, menm si, ki rezilta ou mete ta ka konpoze de ranje miltip. Nan ka sa a, ou gen yon etalaj de arrays-- yon etalaj de ranje asosyatif. Apre sa, ou jis bezwen repekte atravè li. E nou konnen ki jan yo repekte nan yon etalaj nan PHP, dwa? Se konsa, isit se pwobableman pi plis nan konplèks bagay nou te wè byen lwen tèlman. Li aktyèlman entegre twa lang yo ansanm. Isit la nan wouj, sa a se kèk HTML. Mwen aparamman starting-- sa a se yon brib nan kèk HTML ke mwen gen. M 'ap kòmanse yon nouvo paragraf ki di manman yo nan Seinfeld televizyon an. Lè sa a, imedyatman apre sa M 'ap kòmanse yon tab. Lè sa a, apre sa, mwen gen kèk PHP, dwa? Mwen gen tout bagay sa yo Kòd PHP nan la. Mwen aparamman pral fè yon rechèch. Men, fè rechèch la, mwen pral lè l sèvi avèk manman chwazi nan manman. Se konsa, sa a se comment- sa a se SQL. Se konsa, nan ble a se SQL. Wouj la nou te wè yon dezyèm de sa te HTML. Ak vèt la isit la se PHP. Se konsa, mwen fè yon demann nan baz done m 'yo, mwen se chwazi tout nan la manman nan tablo a manman. Pa sèlman konble li desann nan patikilye ranje, mwen mande pou tout nan yo. Apre sa, mwen tcheke si rezilta a se pa egal egal fo. Sa a se jis fason mwen an tcheke sòt a si rezilta a se pa egal a nil, ke nou ta renmen wè c pou egzanp. Fondamantalman sa a se jis tcheke yo fè asire w ke li aktyèlman te resevwa done tounen. Paske mwen pa vle kòmanse enprime soti done si mwen pa t 'jwenn nenpòt ki done. Lè sa a, pou chak rezilta kòm yon rezilta nan fortch sentaks soti nan PHP, tout m ap fè se enprime soti manman $ rezilta. Se konsa, mwen pral yo ka resevwa yon seri nan tout nan manman yo nan each-- li nan yon etalaj de asosyatif arrays-- ak mwen enprime soti chak moun kòm pwòp li yo nan ranje yon tab. Epi sa a, reyèlman bèl anpil tout gen nan li. Mwen konnen gen nan yon ti kras ti jan ale sou isit la nan sa a egzanp pase a ak ranje nan arrays-- ranje nan ranje asosyatif. Men, li vrèman jis bouyi desann nan SQL nan fè yon demann, anjeneral chwazi apre nou te deja mete enfòmasyon an tab la, ak Lè sa a jis rale li soti. Lè sa a se nou ta rale li soti nan ka sa a an patikilye. Nou ta ekstrè tout nan moun nan manman nan tablo a manman. Nou gen yon seri antye nan yo, epi nou vle repekte nan ak enprime soti chak kesyon. Se konsa, ankò, sa a se pwobableman egzanp lan pi konplike nou te wè paske nou ap melanje twa lang diferan ansanm, dwa? Yon fwa ankò, nou gen HTML isit la nan wouj, melanje ak kèk SQL isit la nan ble, melanje ak kèk PHP nan vèt. Men, tout moun sa yo jwe joliman ansanm, li nan jis yon kesyon de devlope bon abitid pou ke ou ka jwenn yo travay ansanm nan fason ou vle. Apre sa, wout la sèlman nan vrèman fè sa se avèk pratik, pratik, pratik. Mwen se Doug Lloyd, sa a se CS50.