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 AZ tábla1 inner join 2. táblázat ON table1.field1 = table2.field

SELECT AZ tabla1, 2. táblázat WHERE table1.field1 = table2.field2

SELECT AZ tábla1 inner join 2. táblázat szerinti (field1)

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 AZ tábla1 LEFT JOIN 2. táblázat ON table1.field1 = table2.field2

SELECT AZ tábla1 BAL REGISZTRÁCIÓ 2. táblázat szerinti (field1)

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.