táblázatok a mysql kapcsolat
asztal kapcsolatot a MySQL
Eredetileg azt a célja, hogy a kiadás a „Népi kezdeményezés” gyűjteménye elkövetett hibák fő általam :). Valami, amit gyűjtött a hibákat a hagyományos elemek, stb De az élet sokkal érdekesebb! Írok egy másik kezdeményezés közvetlenül késedelem nélkül.
Tehát egyesek hívják Vasya kérdezi nyilvános fórum a MySQL.
Q.: Nem világos, hogyan lehet létrehozni egy kapcsolatot a táblák között, úgy, hogy az első mező automatikusan beilleszti az adatokat a második (ECHO és az ECHO szelektíven ID).
Opció típusa SELECT db.user, db.delete_priv, user.user, user.delete_priv DB, használati WHERE db.user = user.user nem igazán alkalmas a kommunikációs lehet nevezni egy szakasza.
O.: Őszintén szólva nem értem, hogy miért ez a kapcsolat nem tetszik? Hogy ez a kapcsolat van nyújtva?
Q.: Nos, én nem szeretem a kapcsolatot, amely a keresési lekérdezés szintaxis. Szeretnék valami lényeges, különben nem látom a pontot a kulcsok és indexek.
O.: Egy alaposabb - érted a grafikus felület MS Access?
Sajnos, az Access ugyanígy működik - csak meg kell nyomnia egy gombot „SQL”, és látni fogja a kapcsolatot, a „sztreccs”.
Q.: Csak egyszerűbb szoftver mindezt a jó kis asztal. Miután a MySQL nem működik.
O.: A beágyazott hurok, rekurzió? Mondd, miért tetted adatbázis és táblázatok?
Q.: Nem beágyazott hurok és a rekurzió - olvasható n-edik kolmchestvo tömbök és a munka velük már. , És a kapcsolat alapján Selecta - nem pontosan mit kell.
O.: Ez igaz. Az összes mentése egy fájlban, akkor minden kérdésre nem.
Általában ez a kötelességem, hogy rendezni a táblák között kapcsolat.
Az idegen kulcs, ellenőrzi és IRODALOM kikötések valójában nem csinál semmit. A szintaxis a számukra biztosított csak a kompatibilitás, a könnyebb port kódot egyéb SQL szerverek és alkalmazások futtatásához táblákat létrehozni referenciákkal. Lásd a 5.4 Működési eltűntek a MySQL.
Kommunikáció nélkül szakaszon
Általában nincs túlzás leírja a kapcsolatok a kérés nem volt sem - évszázadok óta az adatbázis működött így. Hozzáférés a nyilakkal és formopostroitelyami jóval később.
Hogyan rossz
Például így:
nevét oszlopok a lekérdezés és tömb tárolja $ dörzsölje.
Most válassza ki a híreket, és helyette kiválasztott szám oszlopot illessze be a megfelelő elem a tömb oszlopok.
Sőt, akkor mentse magát, hogy húz az egész programot a tömb $ dörzsölje (és ha kell megnevezéseket fordult funkció -, hogy átvegye GLOBAL), a lehetőséget, hogy hibázik $ dörzsölje [$ row [ „dörzsölje”]] - ha az oldal több hasonló kéréseket, hogy egy elírás valahol könnyen.
Ezen túlmenően, a tömb $ dörzsölje szüksége van bizonyos mennyiségű memóriát (mintha sok oszlopot?). A harmadik változat a PHP egy script tovább tart, mint a szövetség asztalra, mert úgy értelmezi a program sorban, amikor (szemben a 4., ami lefordítja a programot, majd végrehajtja).
A fenti példában is alkalmazni egyesület asztal és megszabadulni a leírt hátrányokat.
Tehát itt van jobb a lekérdezés "SELECT sites.id, url, sites.name mint sitename, rubs.name mint rubsname, rubs.id mint rub_id webhelyekről, dörzsöli WHERE sites.rub = rubs.id". Kiderült, hogy van, hogy felkészítse a tömegeket, gondozása visszavonása csak azokat az elemeket, és írjon kisebb kódot.
A szintaxis összekötő táblázatok
Egyszerű csatlakozás - inner join:
SELECT
SELECT
SELECT
ha a táblák vannak erősítve a field1 területen.
Ezt a vegyületet a kiválasztott vonal csak azokat a táblákat, amelyek megfelelnek a csatlakozni feltétel - egyenlőség a terület értékeit. Ha nincs megfelelő sor tábla1 sorok 2. táblázat, vonal hiányzik a lekérdezés eredményének. Ha szükséges számolni a telephelyek száma a kategóriában (folytatása példa a katalógusban), ez a kérés nem fér - csak oszlopok jelennek meg a listán, amely a telek. Egy ilyen műtét szükséges használni a bal csatlakozni.
SELECT
SELECT
ha a táblák vannak erősítve a field1 területen.
Ebben az esetben a megfelelő sorra 2. táblázat nem lehet, akkor a területén 2. táblázat kapunk egy nulla, és ha a csoport működését, mint ahogy az a telephelyek száma a kategóriában, míg a területen 0 lesz:
SELECT rubs.id nevét, COUNT (sites.id) AS helyről dörzsöli, BAL REGISZTRÁCIÓ oldalakat ON rubs.id = sites.rub GROUP BY rubs.id
Megjegyzés: az ID mindkét táblában, így meg kell használni a tábla nevét megnevezéssel. By the way, ha az unió nem kötegelt műveleteket, akkor jobb, ha változtatni a nevét, a pályát üzemeltető, a félreértések elkerülése végett.