DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   Sva početnička pitanja (http://www.devprotalk.com/forumdisplay.php?f=40)
-   -   'multiple' ispis iz baze (http://www.devprotalk.com/showthread.php?t=9390)

eclipse 27. 11. 2010. 17:48

'multiple' ispis iz baze
 
Evo slikovit primjer da objasnim šta me zanima. Želim ispisati sve klubove u kojima je neki igrač igrao. Ispis za pojedinačnog igrača nije problem, ali kako prikazali listu svih igrača i klubova u kojima je pojedini igrač igrao?

Upitom sam dobio ovakve podatke (koristeći left join query):


ID | IGRAC | RODJEN | KLUB

1 | c. ronaldo | 2000 | real madrid
1 | c. ronaldo | 2000 | manchester
2 | ronaldihno | 1980 | psg
2 | ronaldihno | 1980 | barcelona
2 | ronaldihno | 1980 | milan


dakle, kako dobiti ispis svih igrača i klubova, poput ovog:

ronaldo - madrid, manchester
ronaldihno - psg, barcelona, milan
...

Probao sam sa dvostrukim for petljama (jedna za dohvat/ispis svih igrača, a druga za dohvat/ispis klubova svakog pojedinog igrača, ali je dolazilo do blokade)

cicika 27. 11. 2010. 18:35

Do kakve blokade?

Pretpostaviću da je ID zapravo ID igrača.. ako uradiš ORDER BY id ASC, možeš da prodješ kroz rezultate samo uz poredjenje da li je došlo do promene ID-ja, ukoliko jeste, dohvatiš ime sledećeg igrača i započneš novu listu klubova.

eclipse 27. 11. 2010. 19:06

Do zagušenja (blokade rada,) mi dolazi kada sam koristio dvije funkcije: dohvati_sve_igrace() i unutar nje dohvati_klubove_pojedinog_korisnika(). Za ispis sam opet koristio dvije funkcije, na istom principu, ispiši sve igrače i ispiši za svakog igrača njegove klubove. Mislio sam da li ima neko drugo rješenje jer mi ovo ne daje rezultat (nešto poput neprekinute petlje iako to nije)

ivanhoe 27. 11. 2010. 19:24

mozes jednim upitom ovako:
Kôd:

SELECT igraci.*,
    GROUP_CONCAT(klubovi.ime ORDER BY klubovi.godina) AS lista_klubova
FROM igraci LEFT JOIN klubovi ON igraci.id=klubovi.igrac_id
GROUP BY igraci.id

dobijes listu klubova za svakog igraca, spojenih zarezima, poredjanih hronoloski po godinama (pretpostavka je da za svaki klub imas polje godina kad je igrao tamo, a ako ne, samo izbaci ono ORDER BY klubovi.godina)

eclipse 27. 11. 2010. 19:38

da li u tom slučaju klubove (ID-e) spremam kao jedan string i pomoću explode() ih prebacim u polje[]? jer mi klubovi trebaju kasnije za checkboxove

ivanhoe 27. 11. 2010. 20:37

najbolje ti je da jednim upitom pokupis sve klubove (id i naziv), i napravis od toga asocijativni niz gde su ID-jevi klubova kljucevi niza (tj. napravis lookup tabelu koja sluzi da pomocu ID-ja kluba brzo dohvatis ime kluba)

Onda napravis drugi upit kao ovaj u mom primeru, samo umesto imena klubova konketujes id-jeve. Kad prikazujes uradis explode tog polja da bi dobio niz ID-ja, i onda samo u petlji radis sa njima (a za prikaz naziva kluba koristis lookup u onom nizu iz prvog upita, posto imas ID)

tako nekako...:)

eclipse 27. 11. 2010. 22:17

to je to, samo da uspijem napraviti:1045:
thanx man:1026:

Lecter 15. 12. 2010. 17:18

A, što mu niko ne reče da mu organizovanje podataka u bazi nije baš najsrećnije pa onda čupanje istih ide... čupavo :)

vidak 15. 12. 2010. 20:01

Citat:

Originalno napisao Lecter (Napišite 92992)
A, što mu niko ne reče da mu organizovanje podataka u bazi nije baš najsrećnije pa onda čupanje istih ide... čupavo :)

Zato što najčešće takvi saveti budu nekorisni jer osoba nije spremna da se upusti u ozbiljniju analizu problema. U ovom slučaju se to vidi po izjavi "da li u tom slučaju klubove (ID-e) ..." a po strukturi tabele se može predpostaviti da imena klubova nisu unique pa se ne mogu ni tretirati kao oblik ID-a ... bla, bla, bla... ja sam se više putao opekao na ovom forumu sa davanjem korisnih saveta.

ivanhoe 15. 12. 2010. 23:56

a na osnovu cega vi vidite njegovu strukturu tabela?

Covek nigde nije naveo kako mu izgleda tabela, samo kako izgledaju podaci nakon JOIN-a..


Vreme je GMT +2. Trenutno vreme je 16:49.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.