» »

[sql] problem

[sql] problem

tx-z ::

Rabim en select stavek in sicer je sledeče.
Imamo profesorje. Vsak profesor ima lahko nek predmet. Nek predmet ima lahko tudi več profesorjev in sicer na dva načina:
*predmet mata recimo 2 ločena profesorja ki sta izvajalca tega predmeta,
*predmet mata 2 profesorja vendar sta skupna izvajalca predmeta.

Baza je tko da mam
izvajalec [zap_id, leto_id, pred_id, delitev_studenta, delitev_snovi]
zaposlenec [zap_id, zap_priimek, zap_ime,...]

zap_id predstavlja pač zaporedno številko, leto zaporedno številko leta, pred_id predstavlja id predmeta, če je 1 pri delitev študenta sta profesorja izpisana ločeno, če pa 1 na delitev snovi pa sta skupna izvajalca in se izpišeta skupaj.

Recimo sledeči select stavek
$sql = 'SELECT * from izvajalec i, zaposlenec z WHERE i.zap_id=z.zap_id AND i.pred_id='.$predmet.'';
bi vrnil vse izvajalce, ne glede na to ali imata predmet skupaj ali ločeno-vsakega v svoji vrstici. Rabil bi pa tak stavek, da če bi v dveh zaporednih zapisih, recimo:
izvajalec:
*1 	10 	222 	1 	0
*2 	10 	222 	1 	0

V tem primeru bi ju izpisal ločeno (dve vrstici)...Torej izvajalec 1 in izvajalec 2..
V sledečm primeru
izvajalec:
*3 	10 	333 	0 	1
*4 	10 	333 	0 	1

Bi ju pa izpisal v isti vrstici, ločeni z vejico.

Uglavnm baze ne morm spreminjat tko da bi mogu met tako poizvedbo, pa ne vem kako bi to rešu.. :S A kdo lahko pomaga? Upam da sm kokrtok razumljivo napisu..
tx-z
  • spremenilo: tx-z ()

WarpedGone ::

Še ena klasika, ki ne paše najbolje v samo SQL zasnovo - transponiranje vrstic v stolpce.

Stvar je rešljiva, vendar moraš:
a) vnaprej predvidit max število elementev v seznamu ločenem z vejico in za vsako mesto napisat svoj subselect, potem pa rezultate združit en dolg string
b) napisat proceduro ki vrne string katerega prikažeš kot eno polje v zapisu

SQL pač ni proceduralni jezik. Tough luck.
Zbogom in hvala za vse ribe

tx-z ::

a) Max elementov ločenih z vejico je 3. Torej 1 ali 2 ali 3 v isti vrstici ali pa so lahko tudi še v ločenih vrsticah.
tx-z

Zgodovina sprememb…

  • spremenilo: tx-z ()

WarpedGone ::

nardiš subselect ki vedno vrne zapis iz prve vrstice, drug subselect, ki vrne zapis iz druge vrstice in tretjisubselect, ki vedno vrne zapis iz tretje vrstice.
Te tri rezultate nato zlimaš v en string, kjer med zapise dodaš vejico, kadar naslednji zapis ni NULL.
Kako točno to izvedeš je odvisno do baze. MySQL?
Zbogom in hvala za vse ribe

tx-z ::

Ja MySQL. Problem k recimo lah mam en predmet k majo 3je prfoksi. Recimo
1) Novak, Kotnik
2) Simonič
...Torej 2 k ga mata skupi, pa še pol en k ma ločeno
tx-z

WarpedGone ::

No, najprej stuhtaj kako dobiš vrednost iz nekega polja v drugi vrstici.
Iz tega lahko pol sezidaš celo rešitev.
Zbogom in hvala za vse ribe

keworkian ::

Lahko bi naredu en IF pa GROUP_CONCAT

tx-z ::

A lahko kdo mogoče mal bl pomaga, kr nimam kej preveč pojma s temi select stavki ... :/
tx-z

tx-z ::

Ni treba več, hvala :) Sm kr eno poizvedbo naredu pa to vseskp shranu, potem pa z if stavki preureju :)
tx-z


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

mySQL izpis many-to-many to matrix

Oddelek: Izdelava spletišč
7898 (659) klemenSLO
»

[PHP]Zajem podatkov iz baze

Oddelek: Programiranje
354065 (3702) cobrica
»

vb mysql dataset update

Oddelek: Programiranje
81252 (1132) korenje3
»

[SQL] PgAdmin preprosto vprasanje povezano s stolpci v tabeli

Oddelek: Programiranje
222207 (1566) Cvele2011
»

[Access 2007]

Oddelek: Programiranje
132638 (2238) urosz

Več podobnih tem