Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  SQL join märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
redenergy
HV veteran
redenergy

liitunud: 22.03.2004




sõnum 21.11.2012 08:58:10 SQL join vasta tsitaadiga

Tere, kiire küsimus.

Mul on 2 tabelit. Esimeses on Grupid ja teises tabelis on alagrupid esimesele tabelile.
Probleem on selles, et ei kuvata üle 1 alagrupi peagrupi alla, kuigi mõnel pea grupil on mitu alagruppi. Ehk keegi oskab nõu anda?

sql:
  1. mysql_query("SELECT categories.catname, categories.catID, groups.groupname, groups.groupID FROM categories LEFT JOIN groups ON categories.catID = groups.catID AND categories.userID = groups.userID
  2. WHERE categories.userID = 1 AND categories.type = 'exp' GROUP BY catname ")
  3. OR die(mysql_error());
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 9
tagasi üles
vaata kasutaja infot saada privaatsõnum
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 21.11.2012 09:17:04 vasta tsitaadiga

Hommik on ja uni ka natuke.. aga kas see GROUP BY ei käki seda asja ära? See ju peakski tekitama olukorra, kus iga catname väärtuse kohta tuleb väljundisse ainult üks rida. Äkki oled soovinud seda, et sama catname väärtusega read oleksid väljundis järjestikku? Selleks on ORDER BY käsk.

PS. Kui tahad BB-code syntax elemendis kasutada SQL keelt, siis oleks mõistlik ainult päring siia kopeerida ja php maha jätta. Oleks kasu ka sellest SQL hilightingust. icon_wink.gif
sql:
  1. SELECT categories.catname, categories.catID, groups.groupname, groups.groupID FROM categories LEFT JOIN groups ON categories.catID = groups.catID AND categories.userID = groups.userID
  2. WHERE categories.userID = 1 AND categories.type = 'exp' GROUP BY catname

_________________
Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
redenergy
HV veteran
redenergy

liitunud: 22.03.2004




sõnum 21.11.2012 11:10:20 vasta tsitaadiga

Tänan vihje eest icon_wink.gif

Kui group by ei kasutaks siis ta kuvaks iga alagrupi kohta ka ühe peagrupi eraldi uuesti.

Aga peaks olema nii:

Puuviljad
-õun
-pirn
Köögiviljad
-Kurk
-Tomat
-Kapsas
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 9
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 21.11.2012 11:57:28 vasta tsitaadiga

Mis põhjusel need üldse kahte eraldi tabelisse panna?
Paneks ise ühte tabelisse ja parentID lahtriga määraks ära, et kas ta on main category (NULL) või siis subcategory, kui on määratud see.

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
Fukiku
Kreisi kasutaja
Fukiku

liitunud: 06.11.2003




sõnum 21.11.2012 13:16:04 vasta tsitaadiga

redenergy kirjutas:
Tänan vihje eest icon_wink.gif

Kui group by ei kasutaks siis ta kuvaks iga alagrupi kohta ka ühe peagrupi eraldi uuesti.

Aga peaks olema nii:

Puuviljad
-õun
-pirn
Köögiviljad
-Kurk
-Tomat
-Kapsas
Sellest sa paratamatult lahti ei saa, kui sa juba sellist joini tahad teha. See probleem tuleks juba lahendada andmete kuvamisel mitte niivõrd andmebaasis minu arvates. Samas muidugi jah, see, mida mikk36 ütles. icon_smile.gif
_________________
Foxic is just a simple fox
Enne kui sa küsid oma küsimuse - küsi seda vannipardilt! Rangelt soovitatav enne programmeerimise alafoorumisse uue teema tegemist.
Kommentaarid: 2 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 2
tagasi üles
vaata kasutaja infot saada privaatsõnum
andrusny
Kreisi kasutaja
andrusny

liitunud: 20.03.2006




sõnum 21.11.2012 13:29:25 vasta tsitaadiga

Kuna sa esimesest tabelist muud ei võta, kui groupname ja groupID siis ehk oleks mõistlik Kaks päringut. Tegelikult sa pead ju seda grupname või id ennem teadma kuidas sa muidu tead üldse mis gruppi kuvada, siis poleks sealt esimesest ju midagi vaja.
_________________
Kommentaarid: 7 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
redenergy
HV veteran
redenergy

liitunud: 22.03.2004




sõnum 22.11.2012 03:41:31 vasta tsitaadiga

mikk36 kirjutas:
Mis põhjusel need üldse kahte eraldi tabelisse panna?
Paneks ise ühte tabelisse ja parentID lahtriga määraks ära, et kas ta on main category (NULL) või siis subcategory, kui on määratud see.

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

Hmm, aga kuidas siis andmed reastada saaks nii, et kõik pirnid ja õunad otse puuviljade alla tuleksid ja tomat, kurk ja kapsas köögiviljade alla tuleksid?
Et pudru ja kapsaid ei tekiks.
Sest main catergory'sid on mitmeid, kuvan kõik andmed tabelisse üksteise alla
Kommentaarid: 30 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 9
tagasi üles
vaata kasutaja infot saada privaatsõnum
mikk36
HV Guru
mikk36

liitunud: 21.02.2004




sõnum 22.11.2012 14:54:16 vasta tsitaadiga

redenergy, samas artiklis on ka "The Nested Set Model" lõik, mis teeb asja palju lõbusamaks (ka "lõbusamaks").

Teine samateemaline link, kus räägib ka treppimisest: http://www.sitepoint.com/hierarchical-data-database-2/
Kommentaarid: 85 loe/lisa Kasutajad arvavad:  :: 0 :: 2 :: 78
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  SQL join
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.