>> [Music kucheza]
DOUG LLOYD: Katika video wetu juu ya mada ya maendeleo ya mtandao,
tumekuwa zilizotajwa dhana ya Mbegu mara chache, sawa?
Hivyo orodha uko pengine ukoo na kutoka
kusema kwa kutumia Microsoft Excel au Spreadsheets Google.
Ni kweli tu kupangwa seti ya meza, safu, na nguzo.
>> Na database ni wapi Maduka ya tovuti yetu
habari ambazo ni muhimu kwa tovuti yetu kufanya kazi vizuri.
Tena, mfano kweli ya kawaida hapa ni hifadhi ya majina ya watumiaji na nywila
katika database, hivyo kwamba wakati user magogo katika tovuti yetu,
Mbegu yanaweza aliuliza kuona kama mtumiaji ambao upo katika database.
Na kama ni, kuangalia kwamba password yao ni sahihi.
Na kama password yao ni sahihi, basi tunaweza kuwapa chochote ukurasa
wao ni kuomba.
>> Hivyo wewe pengine, tena, ukoo na wazo hili kutoka Excel au Google
Spreadsheets.
Tuna database, meza, safu, na nguzo.
Na kwamba ni kweli aina seti ya msingi
ya kihierarkia kuvunjika hapa.
Hivyo hapa ni spreadsheet Excel.
Na kama wameweza milele kufunguliwa huu au mpango mwingine sawa
unajua kwamba hawa hapa ni rows-- 1, 2, 3, 4, 5, 6, 7.
Hizi ni nguzo.
>> Labda chini hapa, ingawa wewe may si kutumia kipengele hiki sana much--
Mimi itabidi kuvuta in-- tuna wazo hili la karatasi.
Hivyo labda karatasi hizi, kama Mimi mbadala na kurudi,
meza mbalimbali ambazo zipo katika orodha yangu.
Na tukiendelea mfano zote njia, jina la orodha hii
ni Kitabu cha 1.
Labda nina Kitabu 2 na Kitabu 3.
Hivyo kila faili Excel ni Mbegu, kila karatasi ni meza,
na ndani ya kila meza nina wazo hili la safu na nguzo.
>> Hivyo ni jinsi gani mimi kufanya kazi na database hii?
Je, mimi kupata maelezo kutoka humo?
Naam kuna lugha inayoitwa SQL-- ambayo mimi kawaida tu kuwaita Sequel--
na anasimama kwa Uliza muundo lugha.
Na ni lugha ya programu, lakini ni programu ya haki mdogo
lugha.
Siyo kabisa kama wengine kwamba tuna kazi na.
Lakini Madhumuni ya hii lugha ya programu
ni swala Mbegu, kwa kuuliza maelezo ya Mbegu,
kupata taarifa katika Mbegu, na kadhalika.
>> Sisi pia, katika CS50 na ni sana jukwaa la kawaida, ni kuitwa MySQL.
Hiyo ni nini sisi kutumia katika kozi.
Ni wazi chanzo jukwaa kwamba itaanzisha
kinachojulikana kimahusiano database-- Mbegu, kwa ufanisi.
Hatuna haja ya kupata kuingia kwa undani sana
juu ya nini database kimahusiano ni.
Lakini lugha SQL ni hawatambui sana katika kazi
kwa MySQL na mengine yanayofanana mitindo ya database kimahusiano.
>> Na mitambo mingi ya MySQL kuja na kitu
aitwaye phpMyAdmin, ambayo ni user graphical
interface-- GUI-- kwamba inafanya kuwa zaidi kidogo
user kirafiki kutekeleza maswali database,
kwa sababu database ni si tu kutumika na programmers ya juu, sawa?
Wakati mwingine kuna wafanyabiashara hawa wadogo,
na wao hawawezi kuajiri timu ya programmers,
lakini bado wanahitaji kuhifadhi habari katika database.
>> Kitu kama phpMyAdmin inafanya kuwa rahisi sana kwa mtu
ambao kamwe iliyowekwa mbele ya kuchukua na kuwa ukoo na jinsi
kufanya kazi na database.
Tatizo ni, phpMyAdmin, wakati ni ajabu chombo kwa ajili ya kujifunza
kuhusu database, ni mwongozo.
Wewe ni kwenda na kuingia katika hiyo na kutekeleza amri na aina
mambo katika manually.
>> Na kama tunajua kutoka wetu mfano juu ya PHP programu ya mtandao,
kuwa na manually kufanya mambo kwenye tovuti yetu,
kama tunataka nguvu, kazi msikivu tovuti, labda si njia bora.
Tungependa kutafuta njia ya labda aŭtomate hii kwa namna fulani.
Na SQL yatatuwezesha kufanya hivyo.
Hivyo wakati tunakwenda kuanza kufanya kazi na SQL,
sisi kwanza haja ya kuwa na Mbegu kufanya kazi pamoja.
Kujenga database ni kitu pengine
atafanya katika phpMyAdmin, kwa sababu utasikia tu haja ya kufanya hivyo mara moja,
na syntax kwa kufanya hivyo ni mengi zaidi moja kwa moja.
Ni rahisi sana kufanya hivyo katika graphic user interface
kuliko kuandika ni nje kama amri.
Amri wanaweza kupata mbaya kidogo.
Vile vile, kujenga meza Unaweza kupata kidogo kabisa mbaya pia.
Na hivyo mambo kama kujenga database na kujenga meza, ambayo uko
pengine tu kwenda kufanya once-- mara moja kwa meza, mara moja kwa database--
ni sawa kufanya hivyo katika graphical interface.
Katika mchakato wa kujenga meza, utasikia
pia kuwa na bayana wote wa nguzo ambayo itakuwa katika meza hiyo.
Ni aina gani ya habari kufanya unataka kuhifadhi katika meza?
Labda jina la mtumiaji na tarehe ya kuzaliwa, neno la siri, user ID idadi, na labda
mji na serikali, haki?
>> Na kwa kila wakati tunataka kuongeza user Mbegu, tunataka kupata yote sita
ya vipande wale wa habari.
Na sisi kufanya hivyo kwa kuongeza safu ya meza.
Hivyo sisi kwanza kujenga database, kisha sisi kujenga meza.
Kama sehemu ya kujenga meza, sisi ni aliuliza
kutaja kila safu kwamba tungependa katika meza hii.
Na kisha kama sisi kuanza kuongeza habari na database
na swala database zaidi generally-- si tu kuongeza,
lakini kila kitu kingine sisi do-- tutaweza kuwa kushughulika
na safu ya meza, ambayo ni moja Maelezo ya mtumiaji kutoka seti nzima.
>> Hivyo kila safu SQL ni uwezo wa kuikopesha data ya pekee data aina.
Hivyo sisi aina ya kuondolewa huu wazo la aina ya data katika PHP,
lakini wao ni nyuma hapa katika SQL.
Na kuna mengi ya aina data.
Hapa ni 20 tu kati yao, lakini siyo hata wote.
Hivyo tuna mawazo kama INTs-- Integers-- sisi pengine kujua
kwamba safu hii inaweza kushikilia integers.
Na kuna tofauti thereon-- SMALLINT, TINYINT, MEDIUMINT, BIGINT.
Labda hatuwezi daima haja kuumwa nne.
Labda tunahitaji ka nane, na hivyo sisi Unaweza kutumia tofauti hizi kwenye integers
kuwa nafasi kidogo zaidi ufanisi.
Tunaweza kufanya idadi alisema, sisi anaweza kufanya yaliyo idadi uhakika.
Hizi ni pretty sawa.
Kuna baadhi ya tofauti, na kama wewe ungekuwa
kama kuangalia up SQL aina ya mwongozo, wewe
unaweza kuona nini kidogo Tofauti ni kati yao.
>> Labda tunataka kuhifadhi taarifa kuhusu tarehe na wakati.
Labda sisi ni kuweka wimbo wa wakati mtumiaji alijiunga tovuti yetu,
na hivyo labda tunataka kuwa na safu hiyo ni
tarehe wakati au timestamp kwamba inaonyesha wakati mtumiaji kweli
saini.
Tunaweza kufanya geometries na linestrings.
Hii ni kweli pretty baridi.
Tunaweza ramani nje eneo la kijiografia kwa kutumia
GIS kuratibu njama nje eneo hilo.
Hivyo unaweza kweli kuhifadhi aina hiyo wa habari katika safu SQL.
>> TEXT ni matone kubwa ya maandishi, labda.
ENUMs ni aina ya kuvutia.
Wao kweli zipo katika C. Hatuna majadiliano juu yao kwa sababu wao siyo
sana kawaida kutumika, angalau CS50.
Lakini ni aina data enumerated, ambayo ni uwezo wa kufanya maadili mdogo.
>> Mfano mzuri hapa itakuwa kujenga enum ambapo saba
maadili inawezekana ni Jumapili, Jumatatu, Jumanne, Jumatano, Alhamisi, Ijumaa,
Jumamosi, sawa?
Aina hiyo data Siku ya Wiki haipo,
lakini tunaweza kujenga enumerated aina takwimu hizo
kwamba safu kwamba anayeweza kamwe tu kushikilia mmoja wa wale saba maadili iwezekanavyo.
Tumekuwa enumerated zote maadili iwezekanavyo.
>> Basi tuna CHAR na VARCHAR, na nimekuwa rangi ya kijani hizi
kwa sababu sisi ni kweli kwenda kuchukua pili
kuzungumzia tofauti kati ya mambo haya mawili.
Hivyo CHAR, tofauti na C ambapo CHAR ilikuwa tabia moja,
katika SQL CHAR inahusu fasta urefu wa kamba.
Na wakati sisi kujenga hii safu, sisi kweli
Unaweza kutaja urefu wa kamba.
>> Hivyo katika mfano huu, tunaweza kusema CHAR (10).
Hiyo ina maana kwamba kila kipengele cha safu kwamba
itakuwa na wajumbe wa 10 ka wa habari.
Hakuna zaidi, si chini.
Hivyo kama sisi kujaribu na kuweka katika 15 kidogo au kipengele 15 tabia
au thamani katika safu hii, sisi ni tu kupata kwanza 10.
Kama sisi kuweka katika wawili tabia ya muda mrefu thamani,
tunakwenda kuwa na mbili wahusika, na kisha nane null kuumwa.
Tutaweza kamwe kuwa na ufanisi zaidi kuliko hiyo.
>> VARCHAR ni aina ya kama dhana yetu ya kamba
kwamba sisi ni ukoo na kutoka C au kutoka PHP.
Ni urefu wa kamba kutofautiana.
Na wakati kujenga safu hii, wewe tu
kutaja kiwango cha juu urefu iwezekanavyo.
Hivyo labda 99, au kawaida 255.
Hiyo itakuwa upeo wa urefu.
Na hivyo kama tulikuwa kuhifadhi 15 tabia kamba,
tunataka kutumia 15 ka, labda 16 ka for Terminator.
Kama tulikuwa kuhifadhi kamba tabia tatu,
tunataka kutumia ka mitatu au minne.
Lakini sisi bila kutumia full 99.
>> Hivyo ni kwa nini tuna zote mbili?
Naam, kama tunahitaji kufikiri jinsi muda mrefu kitu ni pamoja na VARCHAR,
tuna aina ya iterate hela yake tu kama tulivyofanya katika C
na takwimu nje ambapo ataacha.
Wakati kama tukijua kwamba kila kitu katika safu hii ni 10 ka, labda
tunajua kwamba habari, tunaweza kuruka Ka 10, 10 ka, 10 ka, 10 ka,
na daima kupata mwanzo wa kamba.
>> Hivyo sisi kuwa na baadhi ya kupita nafasi kwa CHAR,
lakini labda kuna biashara mbali ya kuwa na kasi bora
katika punde database.
Lakini labda tunataka mabadiliko ya VARCHAR
badala ya having-- Kama CHAR yetu ilikuwa 255, lakini zaidi ya watumiaji wetu
walikuwa tu inputting ka mitatu au minne thamani cha habari au tatu au nne
wahusika thamani ya habari.
>> Lakini baadhi ya watumiaji walikuwa wanatumia 255 mzima, labda
VARCHAR itakuwa sahihi zaidi huko.
Ni aina ya biashara mbali, na ujumla kwa madhumuni ya CS50,
huna haja ya kuwa na wasiwasi sana kuhusu kama wewe kutumia CHAR au VARCHAR.
Lakini katika ulimwengu wa kweli, mambo hayo je jambo kwa sababu yote ya nguzo hizi
kuchukua nafasi halisi ya kimwili.
Na nafasi ya kimwili, katika ulimwengu wa kweli, anakuja katika premium.
>> Hivyo kuzingatia wengine moja wakati wewe ni kujenga meza
ni kuchukua safu moja kuwa kile kinachoitwa muhimu ya msingi.
Na muhimu ya msingi ni safu ambapo kila moja thamani ni ya kipekee.
Na hiyo ina maana kwamba unaweza kwa urahisi kubaini nje safu moja tu kwa kuangalia
katika msingi muhimu wa mstari huo.
Hivyo kwa mfano, wewe ujumla, kwa watumiaji,
hawataki watumiaji wawili ambao kuwa sawa user ID idadi.
Na hivyo labda una kura ya habari,
na labda watumiaji mbili Unaweza na name-- sawa
una John Smith na John Smith.
Hiyo ni si lazima tatizo, kwa sababu kuna watu mbalimbali
katika dunia aitwaye John Smith.
Lakini sisi tu user moja ID idadi 10, mtumiaji mmoja ID namba 11, 12, 13.
Hatuna watumiaji mbili na idadi sawa,
na hivyo labda user ID nambari itakuwa muhimu ya msingi mzuri.
>> Hatuna kurudia wowote, na tunaweza sasa ya kipekee
kutambua kila safu moja tu kwa kuangalia safu hiyo.
Uchaguzi wa funguo za msingi kweli anaweza kufanya shughuli meza baadae
rahisi sana kwa sababu unaweza kujiinua ukweli kwamba safu fulani mapenzi
kuwa ya kipekee, au safu fulani ya Mbegu yako au meza
itakuwa ya kipekee ya kuchukua nje hasa safu.
>> Unaweza pia kuwa na msingi pamoja muhimu, ambayo unaweza kupata tukio
kutumia, ambayo ni haki mchanganyiko wa nguzo mbili kwamba
ni uhakika kuwa ya kipekee.
Hivyo labda una moja safu hiyo ni Kama na Bs,
safu moja hiyo ni moja, mbili, na tatu, lakini utasikia milele tu
kuwa A1 moja, moja A2, na kadhalika na kadhalika.
Lakini unaweza kuwa na B2, C2, au A1, A2, A3, A4.
Hivyo unaweza kuwa na As nyingi, nyingi Bs, ndio nyingi, wawili-wawili nyingi,
lakini unaweza tu milele kuwa moja A1, B2, C3, na kadhalika.
Hivyo kama nilivyosema, SQL ni lugha ya programu,
lakini ina msamiati haki mdogo.
Siyo kabisa kama pana kama ilivyo C na PHP na lugha nyingine
kwamba tunazungumza katika mwendo.
Ni zaidi verbose a lugha ya nini tuko
kwenda kuzungumza kuhusu katika hii video, kwa sababu katika video hii
sisi ni kwenda kuzungumza kuhusu shughuli nne kwamba sisi
anaweza kufanya juu ya meza.
>> Kuna zaidi ya hii.
Tunaweza kufanya zaidi ya hayo, lakini kwa madhumuni yetu,
sisi ni ujumla itakuwa ni ya kutumia tu nne operations-- kuingiza,
kuchagua, update, na kufuta.
Na pengine unaweza nadhani intuitively nini zote nne za mambo hayo kufanya.
Lakini tutaweza kwenda katika kidogo cha zaidi juu ya kila mmoja.
>> Hivyo kwa madhumuni ya hii video, hebu kudhani
tuna zifuatazo miwili meza katika database moja.
Tuna meza inayoitwa Watumiaji ambayo ina nne columns-- ID idadi, jina la mtumiaji,
neno la siri, na jina kamili.
Na tuna pili meza katika orodha hiyo
aitwaye Moms kwamba maduka ya habari tu kuhusu jina la mtumiaji na mama.
Hivyo kwa wote wa mifano katika video hii, tutaweza
kutumia orodha hii na updates na baadae yake.
Basi hebu kusema tunataka kuongeza habari kwa meza.
Hiyo ni nini operesheni kuingiza gani.
Katika kueleza yote ya amri hizi, mimi nina kwenda
kukupa mifupa ujumla kutumia.
Kwa sababu kimsingi, maswali wanaenda kuangalia pretty sawa,
tunakwenda tu kuwa kubadilisha vipande tofauti kidogo cha habari
kufanya mambo mbalimbali na meza.
>> Hivyo kwa Insert, mifupa Inaonekana aina ya kama hii.
Tunataka kuingiza ndani Hasa meza.
Basi tuna mabano wazi na orodha ya nguzo
kwamba tunataka kuweka maadili ndani.
Karibu mabano, kufuatia maadili, na kisha
tena, sisi orodha nje maadili tunataka kuweka katika meza.
>> Hivyo Mfano wa hili itakuwa yafuatayo.
Nataka kuingiza ndani ya meza watumiaji columns-- zifuatazo
username, password, na majina kamili.
Hivyo safu mpya ambapo mimi nina kuweka katika nguzo wale watatu na tuko
kwenda kuweka katika maadili Newman, USMAIL, na Newman.
Hivyo katika kesi hii, mimi nina kuweka NEWMAN ndogo
ndani ya safu username, password USMAIL, na jina kamili mtaji N
Newman katika safu majina kamili.
>> Hivyo hapa ni nini orodha inaonekana kama kabla.
Hapa ni nini meza watumiaji juu ya juu inaonekana kama kabla sisi alifanya hivyo.
Baada ya sisi kutekeleza hii swala, sisi kupata hii.
Tumekuwa aliongeza safu mpya ya meza.
Lakini taarifa neno hili kwamba sikuwa kutaja,
lakini kwa namna fulani mimi nimepata thamani kwa, ambayo ni hii 12 hapa hapa.
Mimi hakusema nilitaka kuweka idadi ID huko.
Nilitaka kuweka jina la mtumiaji, neno la siri, majina kamili.
Na mimi kwamba, hiyo ni nzuri.
>> Lakini mimi pia alipata huu 12.
Kwa nini mimi kupata hii 12?
Naam, ni zamu nje kwamba wakati wewe ni kufafanua
safu kwamba ni kwenda kuwa yako muhimu ya msingi, ambayo ni kawaida,
kama nilivyosema, namba ya kitambulisho.
Siyo kila mara lazima kwenda kuwa idadi ID,
lakini ni kawaida wazo nzuri ya kuwa baadhi ya aina ya thamani integer.
Una fursa katika phpMyAdmin wakati wewe ni kujenga orodha yako
au meza yako kuweka kwamba safu kama auto incrementing.
>> Ambayo ni wazo nzuri kwa kweli wakati wewe ni kufanya kazi na muhimu ya msingi,
sababu unataka kila thamani katika safu kwamba kuwa ya kipekee.
Na kama wewe kusahau kutaja ni kwa zaidi ya mtu mmoja,
sasa una hali ambapo safu hiyo ni tena ya kipekee.
Una nafasi zilizoachwa wazi miwili, hivyo unaweza hakuna tena kipekee kutambua column--
au huwezi tena ya kipekee kutambua mstari kulingana na safu hiyo.
Ni kupoteza wote wa wake thamani kama msingi muhimu.
>> Na hivyo inaonekana nini nimefanya hapa kimeundwa user ID
safu ya magari ya nyongeza ili kila wakati mimi kuongeza habari kwa meza,
itakuwa moja kwa moja nipe thamani ya muhimu ya msingi.
Hivyo siwezi kamwe kusahau kufanya hivyo kwa sababu Mbegu atafanya hivyo kwa ajili yangu.
Hivyo hiyo ni aina ya nzuri.
Na hivyo ndiyo sababu sisi kupata 12 katika huko, kwa sababu nimekuwa
kuweka kwamba safu hadi auto nyongeza.
Kama mimi aliongeza mtu mwingine d kuwa 13, ikiwa mimi aliongeza
mtu mwingine d kuwa 14, na kadhalika.
>> Basi hebu tu kufanya moja zaidi kuingizwa.
Tutaweza kuingiza ndani moms meza, katika Hasa, jina la mtumiaji na mama
safu, maadili Kramer na Babs Kramer.
Na hivyo tulikuwa na hii kabla.
Baada ya sisi nitafanya kwamba Swala SQL, tuna hii.
Tumekuwa aliongeza Kramer na Babs Kramer kwa akina mama meza.
>> Hivyo hiyo ni kuingiza.
SELECT ni nini sisi kutumia ili kutoa taarifa kutoka meza.
Hivyo hii ni jinsi sisi kupata Maelezo nje ya database.
Na amri hiyo SELECT ni kwenda kuwa mara nyingi sana kutumika katika kompyuta.
Mkuu framework-- mkuu mifupa inaonekana kama hii.
Kuchagua seti ya nguzo kutoka meza, na kisha hiari
unaweza kutaja condition-- au kile sisi kawaida wito prediketo,
ni kawaida mrefu sisi kutumia katika SQL.
>> Lakini ni kimsingi nini safu fulani, unataka kupata.
Kama unataka, badala ya kupata kila kitu, nyembamba ni chini,
hii ni wapi ingeweza kufanya hivyo.
Na kisha hiari, unaweza pia ili kwa safu fulani.
Hivyo labda unataka kuwa na mambo yamepangwa alphabetically kulingana na safu moja
au alphabetically kulingana na mwenzake.
>> Tena, WAPI na ORDER BY ni hiari.
Lakini wao itabidi pengine kuwa useful-- hasa
WAPI itakuwa na manufaa kwa nyembamba chini hivyo huna
kupata Mbegu yako yote nyuma na kuwa na mchakato yake, wewe tu kupata
vipande vya hiyo unaowajali.
Hivyo kwa mfano, mimi kutaka kuchagua Nambari ya kitambulisho na majina kamili kutoka kwa watumiaji.
Hivyo kile anaweza huu kuangalia kama?
Hivyo hapa ni watumiaji yangu meza.
Nataka kuchagua idnum na majina kamili kutoka kwa watumiaji.
Nataka kwenda kupata?
Mimi nina kwenda kupata hii.
Sikuwa nyembamba ni chini, hivyo mimi nina kupata idadi ID kwa kila mstari
na mimi nina kupata full jina kutoka kila mstari.
>> SAWA.
Nini kama nataka kuchagua password kutoka kwa watumiaji WHERE-- hivyo sasa
Mimi nina kuongeza hali, predicate-- ambapo idnum ni chini ya 12.
Hivyo hapa ni orodha yangu tena, watumiaji yangu juu ya meza.
Nataka kwenda kupata kama nataka kuchagua habari kwamba, neno la siri,
ambapo mtumiaji ID au idnum ni chini ya 12?
Mimi nina kwenda kupata hii habari nyuma, haki?
Ni hutokea kwamba idnum ni 10, chini kuliko 12, ID namba 11 chini ya 12.
Mimi nina kupata password kwa safu hizo.
Hiyo ni nini mimi aliuliza kwa.
Nini kuhusu hili?
Nini kama mimi unataka kuchagua nyota kutoka akina mama meza ambapo jina la mtumiaji sawa na Jerry?
OK, kuchagua nyota ni maalum aina ya kadi ya pori kinachojulikana
kwamba sisi kutumia ili kupata kila kitu.
Hivyo wao ni kusema kuchagua jina la mtumiaji comma mama, ambayo
kilichotokea kwa kuwa tu nguzo mbili ya meza hii,
Siwezi kuchagua tu nyota na kupata kila kitu
ambapo jina la mtumiaji sawa na Jerry.
Na hivyo kwamba ni nini napenda kupata kama mimi alifanya kwamba swala fulani.
>> Sasa, databaser ni kubwa kwa sababu wao kuruhusu
sisi kuandaa taarifa labda kidogo kwa ufanisi zaidi kuliko sisi
inavyopaswa.
Sisi si lazima kuhifadhi kila kipande muhimu cha habari
kuhusu user katika meza moja.
Tulikuwa na meza mbili huko.
>> Tunahitaji kuhifadhi jina la mama ya kila mtu wa,
na labda hatuna usalama wa jamii idadi, tuna tarehe yao ya kuzaliwa.
Hiyo haina daima haja kuwa katika meza moja.
Muda mrefu kama tunaweza kufafanua mahusiano kati ya tables--
na hapo ndipo kwamba kimahusiano Mbegu mrefu aina ya kuja
ndani ya play-- kwa muda mrefu kama tunaweza kufafanua mahusiano kati ya meza,
tunaweza aina ya compartmentalize au mambo ya kufikirika njia,
ambapo sisi tu Maelezo kweli ni muhimu
sisi huduma ya juu katika mtumiaji meza.
Na kisha tuna maelezo saidizi au maelezo ya ziada katika meza nyingine
kwamba tunaweza kuungana nyuma kuu watumiaji meza kwa namna ya pekee.
>> Hivyo hapa tuna mbao hizo mbili, lakini kuna uhusiano kati yao,
sawa?
Inaonekana kama jina la mtumiaji inaweza kuwa kitu
ambayo ipo katika kawaida kati hizi mbao mbili tofauti.
Basi nini kama sisi sasa kuwa hali ambapo sisi
wanataka kupata mtumiaji jina kamili kutoka mtumiaji meza, na mama zao
jina kutoka meza mama?
Hatuna njia ya kupata kuwa kama ilivyo sasa, sawa?
Hakuna meza moja ambayo ina wote jina kamili na jina la mama.
Hatuna chaguo kwamba kutokana na kile tumeona hadi sasa.
>> Na hivyo tuna kuanzisha wazo la kujiunga.
Na kujiunga na pengine zaidi complex--
ni kweli zaidi operesheni tata tunakwenda kuzungumzia katika video.
Wao ni kidogo ngumu, lakini mara moja kupata hutegemea yake,
wao ni kweli si mbaya sana.
Ni tu kesi maalum ya SELECT.
Tunakwenda kuchagua seti ya nguzo kutoka meza ya kujiunga na
katika meza ya pili juu ya baadhi prediketo.
>> Katika kesi hiyo, fikiria kuhusu hilo kama Haya meza moja ni mzunguko mmoja zaidi ya hapa,
meza mbili ni mduara mwingine zaidi ya hapa.
Na kwamba prediketo sehemu katikati, ni
aina ya kama kama unafikiri kuhusu kama mchoro Venn, nini
gani wao kwa pamoja?
Tunataka kuunganisha mbao hizo mbili kulingana na kile walichonacho kwa pamoja
na kujenga meza hii kubuni kuwa ni muungano wa mbili pamoja.
Hivyo tutaweza kuona hii katika mfano na labda kwamba utakuwa msaada
wazi ni juu kidogo.
Hivyo labda unataka kuchagua user.fullname na moms.mother
kutoka kwa watumiaji kujiunga katika akina mama meza katika kila hali
ambapo safu jina la mtumiaji ni sawa baina yao.
Na hii ni mpya syntax hapa, mtumiaji huyu.
na moms ..
Kama mimi nina kufanya meza nyingi pamoja, siwezi kutaja meza.
Siwezi kutofautisha katika juu ya hasa kuwa juu ya chini sana huko.
Siwezi kutofautisha jina la mtumiaji safu ya meza watumiaji
kutoka jina la mtumiaji safu ya akina mama meza, ambayo ni otherwise--
kama sisi tu alisema jina la mtumiaji sawa na jina la mtumiaji, kwamba kweli haina
maana yoyote.
Tunataka kufanya hivyo ambako mechi.
>> Hivyo siwezi kutaja meza na safu jina katika kesi ya hali
ambapo itakuwa ni wazi nini mimi kuzungumza juu.
Hivyo kwamba wote mimi nina kufanya kuna mimi nina akisema safu hii kutoka meza hii,
na kuwa wazi sana.
Hivyo tena, mimi nina kuchagua jina kamili na jina la mama
kutoka kwa watumiaji meza wanaohusishwa pamoja na moms meza katika kila hali
ambapo wao kushiriki kwamba column-- wao kushiriki kwamba jina la mtumiaji dhana.
>> Hivyo hapa ni meza sisi alikuwa mbele.
Hii ni hali ya yetu Mbegu kama ilivyo hivi sasa.
Maelezo tuko kuchimba ni hii ya kuanza kwa.
Hii ni meza mpya tunakwenda kujenga kuchanganya hizi kwa pamoja.
Na taarifa sisi siyo kuonyesha Newman mstari katika mtumiaji meza,
na sisi siyo kuonyesha Kramer mstari katika moms meza
kwa sababu wala moja ipo katika wote sets-- katika meza zote mbili.
>> Maelezo pekee ambayo ni ya kawaida katika kati yao ni Jerry ni katika meza wote
na gcostanza ni katika meza zote mbili.
Na hivyo wakati sisi kufanya SQL JOIN, nini sisi get-- na sisi kufanya kweli kupata hii.
Ni aina ya kutofautiana kwa muda.
Ni kama nadharia muungano wa meza mbili.
Sisi kwa kweli kupata kitu kama hii, ambapo
tumekuwa ilijiunga pamoja na meza juu ya habari kwamba wao kuwa pamoja.
>> Hivyo taarifa kwamba users.username na moms.username safu,
ni sawa.
Hiyo ilikuwa habari kwamba alikuwa sambamba na watumiaji
meza na akina mama meza.
Na hivyo sisi ilijiunga nao pamoja.
Sisi kuondolewa Kramer kwa sababu yeye haikuwepo katika meza watumiaji,
na sisi kuondolewa Newman, kwa sababu yeye hayupo katika moms meza.
Hivyo hii ni muungano kubuni kutumia JOIN uendeshaji wa SELECT.
>> Na kisha tulikuwa kuangalia kwa mtumiaji jina kamili na mama mtumiaji,
na hivyo hii ni habari ambazo tunataka kupata kutoka swala ujumla
kwamba sisi kufanywa na SELECT.
Hivyo sisi alijiunga meza pamoja na sisi kuondolewa nguzo hizo mbili,
na hivyo kwamba ni nini tunataka kupata.
Lakini SQL anaungana aina ya ngumu.
Pengine si kufanya nao sana, lakini tu na wazo baadhi ya mifupa
kwamba unaweza kutumia kwa kuunganisha mbili meza pamoja kama zinahitajika.
Mbili za mwisho ni kidogo rahisi mimi ahadi.
Hivyo kuhuisha, tunaweza kutumia UPDATE kubadili habari katika meza.
Muundo wa jumla ni UPDATE baadhi meza, SET baadhi safu ya baadhi ya thamani
WAPI baadhi prediketo ni kuridhika.
Hivyo kwa mfano, sisi kutaka update meza watumiaji
na kuweka neno la siri kwa yada yada, ambapo nambari ya kitambulisho ni 10.
>> Hivyo katika kesi hii, tuko kuhuisha meza watumiaji.
Nambari ya kitambulisho ni 10 kwa kwamba safu ya kwanza huko,
na tunataka update password yada yada.
Na hivyo ndiyo nini kitatokea.
Ni pretty moja kwa moja, sawa?
Ni tu rahisi sana muundo wa meza.
>> Kufuta ni operesheni tulikuwa kuondoa habari kutoka meza.
Kufuta kutoka meza WAPI baadhi prediketo ni kuridhika.
Tunataka kufuta kutoka watumiaji meza kwa mfano
ambapo jina la mtumiaji ni Newman.
Pengine unaweza nadhani nini kinaendelea kutokea hapa baada ya sisi nitafanya kwamba SQL
swala, Newman ni gone kutoka meza.
>> Hivyo shughuli zote hizi, kama nilivyosema, ni rahisi sana kufanya katika phpMyAdmin.
Ni user sana kirafiki.
Lakini haina kuhitaji juhudi mwongozo.
Hatutaki kuajiri juhudi za mikono.
Tunataka mipango yetu kwa kufanya hivyo kwa ajili yetu, haki?
Hivyo sisi kutaka kufanya hii programmatically.
Tunataka kuingiza SQL na kuwa na kitu kingine kwa kufanya hivyo kwa ajili yetu.
>> Lakini nini sisi kuonekana kwamba inaruhusu sisi programmatically kufanya kitu?
Tumeona PHP, sawa?
Ni utangulizi baadhi mabadiliko katika mipango yetu.
Na hivyo kwa bahati nzuri, SQL na PHP kucheza vizuri sana pamoja.
Kuna kazi katika PHP aitwaye swala, ambayo inaweza kutumika.
Na unaweza kupita kama parameter au hoja
swala swala SQL kwamba ungependa kutekeleza.
Na PHP atafanya hivyo kwa niaba yako.
>> Kwa hiyo baada ya umefanya kushikamana Mbegu yako na PHP,
kuna mchujo mbili wewe kufanya hivyo.
Kuna kitu kinachoitwa MySQLi na kitu kinachoitwa PDO.
Sisi si kwenda katika mkubwa Kiasi undani huko.
Katika CS50 tunatumia PDO.
Baada ya umefanya kushikamana Mbegu yako, wewe
Basi unaweza kufanya maswali Mbegu yako kwa kupita maswali kama hoja
kwa kazi PHP.
Na wakati wa kufanya hivyo, kuhifadhi Matokeo yake kuweka katika safu associative.
>> Na tunajua jinsi ya kufanya kazi na associative arrays katika PHP.
Hivyo mimi anaweza kusema kitu kama hii $ results--
hii ni katika PHP-- sawa na swala.
Na kisha ndani ya swala kazi ambayo hoja
kwamba mimi nina kupita swala kwamba inaonekana kama SQL.
Na katika ukweli kwamba ni SQL.
Hiyo ni kamba swala ambalo napenda kama nitafanya kwenye orodha yangu.
>> Na hivyo katika nyekundu, hii ni PHP.
Hii ni SQL kwamba mimi nina kuunganisha katika PHP kwa kufanya
ni hoja kwa kazi swala.
Nataka kuchagua majina kamili kutoka watumiaji ambapo nambari ya kitambulisho sawa na 10.
Na kisha labda baada ya mimi tumefanya kwamba, Mimi anaweza kusema kitu kama hiki.
Nataka magazeti nje Ujumbe Shukrani kwa magogo katika.
>> Na mimi nataka interpolate-- nataka interpolate matokeo $ majina kamili.
Na hivyo hiyo ni jinsi mimi kazi na kwamba safu associative kwamba mimi got nyuma.
$ matokeo majina kamili ingekuwa kimsingi kuishia uchapishaji nje,
shukrani kwa ajili ya magogo katika, Jerry Seinfeld.
Hiyo ilikuwa jina kamili ambapo idnum sawa na 10.
>> Na hivyo wote mimi nina kufanya ni mimi nina now-- mimi kuhifadhiwa
swala yangu, matokeo ya swala yangu na matokeo katika safu associative,
na majina kamili ni jina la safu nilikuwa kupata kwa.
Hivyo hiyo ni muhimu yangu katika matokeo safu associative kwamba nataka.
Hivyo Shukrani kwa magogo katika, matokeo $, majina kamili magazeti nje, itakuwa fimbo
haki katika kati ya wale curly braces, Jerry Seinfeld.
Na mimi itabidi kama magazeti nje ujumbe Shukrani kwa ajili ya kuingia katika Jerry Seinfeld.
>> Sasa, sisi pengine hawataki ngumu kificho mambo kama hayo katika, sawa?
Sisi kutaka kufanya kitu kama magazeti f, ambapo tunaweza mbadala na labda
kukusanya taarifa mbalimbali, au labda na mchakato swala
taarifa mbalimbali.
Na hivyo swala, kazi swala ina wazo hili la aina ya mabadilisho
sawa na asilimia s magazeti f na asilimia c, ni alama ya kuuliza.
>> Na tunaweza kutumia swali alama kama mfano sana
magazeti f kwa vigezo mbadala.
Hivyo labda user yako watumiaji katika mapema, na kuokolewa mtumiaji zao idadi ID
katika $ _session ya PHP super kimataifa katika ID ufunguo.
Hivyo labda baada ya wao umeingia, kuweka $ _session ID sawa na 10,
extrapolating kutokana na mfano sisi tu kuona pili iliyopita.
>> Na hivyo wakati sisi kweli nitafanya hii swala matokeo sasa,
ingekuwa kuziba katika 10, au chochote $ _session ID thamani ya kitu.
Na hivyo kuwa inaruhusu sisi kuwa kidogo nguvu zaidi.
Sisi siyo ngumu coding mambo katika tena.
Sisi ni kuokoa maelezo mahali fulani na kisha
tunaweza kutumia taarifa ambazo tena kwa aina ya kujumlisha nini tunataka kufanya,
na kuziba-katika haki na mabadiliko tabia ya ukurasa wetu
kulingana na kile mtumiaji ID idadi kweli ni baada ya wameweza watumiaji katika.
Ni pia inawezekana, ingawa, kwamba matokeo yako kuweka
inaweza wajumbe wa safu mbalimbali.
Katika kesi ambayo, una safu ya arrays--
safu ya associative arrays.
Na wewe tu haja ya iterate kwa njia hiyo.
Na tunajua jinsi ya iterate kupitia safu katika PHP, sawa?
Hivyo hapa pengine ni Jambo tata tumeona hadi sasa.
Ni kweli samlar lugha tatu kwa pamoja.
>> Hapa katika nyekundu, hii ni baadhi HTML.
Mimi inaonekana starting-- hii ni snippet ya baadhi HTML kwamba nina.
Mimi nina kuanza aya mpya ambayo Anasema akina mama wa TV Seinfeld.
Na kisha mara baada ya Mimi nina kuanza meza.
Na kisha baada ya hapo, mimi kuwa na baadhi ya PHP, sawa?
Nina yote haya kificho PHP huko.
Mimi inaonekana kwenda kufanya swala.
Na kufanya swala, mimi nina kwenda kwa kuwa kwa kutumia akina mama SELECT kutoka moms.
>> Hivyo hii ni getting-- hii ni SQL.
Hivyo bluu ni SQL.
Nyekundu tuliona pili iliyopita mara HTML.
Na kijani hapa ni PHP.
Hivyo mimi nina kufanya swala Mbegu yangu, mimi nina
kuchagua yote ya akina mama katika moms meza.
Si tu nyembamba ni chini ya fulani mstari, mimi nina kuuliza kwa ajili yao wote.
>> Kisha mimi kuangalia kama matokeo ni si sawa sawa na uongo.
Hii ni njia yangu ya kuangalia namna ya kama matokeo si sawa kwa null,
kwamba tunataka kuona c kwa mfano.
Kimsingi hii ni kuangalia tu kufanya kuhakikisha kwamba ni kweli got data nyuma.
Kwa sababu mimi si unataka kuanza kuchapa nje data kama sikuweza kupata data yoyote.
Kisha kwa kila matokeo kutokana foreach syntax na PHP, kila mimi nina kufanya
ni uchapishaji nje akina mama $ matokeo.
Na hivyo mimi nina kwenda kupata kuweka ya yote ya akina mama wa each--
ni safu associative ya arrays-- na mimi nina uchapishaji nje
kila mmoja kama mwenyewe mstari wake wa meza.
Na kwamba ni kweli pretty much wote kuna hiyo.
Najua kuna kidogo kidogo kinachoendelea hapa
katika mfano huu wa mwisho na arrays ya arrays-- arrays ya arrays associative.
Lakini ni kweli haina jipu tu chini katika SQL kwa kufanya swala,
Kwa kawaida kuchagua baada tumekuwa tayari kuweka habari katika meza,
na kisha tu kuunganisha ni nje.
>> Na hii ni tunataka kuvuta ni nje katika kesi fulani.
Tunataka kutafuta wote wa mtu binafsi akina mama kutoka moms meza.
Tulipata seti nzima ya yao, na sisi wanataka iterate kupitia na magazeti nje
kila mmoja.
Hivyo tena, hii pengine ni mfano ngumu zaidi
tumeona sababu sisi ni kuchanganya tatu lugha mbalimbali pamoja, sawa?
>> Tena, tuna HTML hapa katika nyekundu, kuchanganywa na baadhi SQL hapa katika bluu,
kuchanganywa na baadhi PHP katika kijani.
Lakini yote haya kucheza vizuri pamoja, ni
suala la kuendeleza tabia nzuri ili uweze kupata
wafanye kazi pamoja njia unataka.
Na njia pekee ya kweli kufanya hivyo ni kufanya mazoezi, mazoezi, mazoezi.
Mimi nina Doug Lloyd, hii ni CS50.