 |
Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Comunitatea PHP Romania
|
| Subiectul anterior :: Subiectul următor |
| Autor |
Mesaj |
sniperhonour
Data înscrierii: 19/Iul/2007
Mesaje: 3
|
| Trimis: Dum Iul 27, 2008 7:31 pm Titlul subiectului: Extractie complicata (incalcita) din Baza de Date |
|
|
salut,
am nevoie de putin ajutor cu urmatoarele...
de exemplu am 1 tabel cu 4 campuri si 3 lini:
PICTURE_NAME, ALBUM_NAME, ALBUM_THUMB, ID
Manager , Album One , images/thb.jpg, 1
Home , Album Two , images/1.jpg , 2
Mother , Album One , images/2.jpg , 4
Cum pot sa fac urmatoarele:
-- Sa afisez intr-o pagina cate albume exista in baza de date folosind "DISTINCT" pentru a nu repeta numele ||| si in dreptul fiecarui nume de album sa fie afisat primul obiect (ALBUM_THUMB) asociat cu numele albumului ( MIN (ID) din Albumul asociat - practic ID ul prezent la prima inregistrare in album ).
exemplu de afisare:
Album Name: Album One, Thumb: thb.jpg ( luat de la IDul cel mai mic asociat Albumui One )
Album Name: Album Two, Thumb: 1.jpg ( luat de la IDul cel mai mic asociat Albumui Two )
Am mare nevoie de o solutie la aceasta problema pentru a-mi putea continua munca. Va multumesc mult si astept cu nerabdare un raspuns. |
|
| Sus |
|
olympia
Data înscrierii: 26/Mai/2008
Mesaje: 151
|
| Trimis: Dum Iul 27, 2008 8:19 pm Titlul subiectului: |
|
|
sniper, pe bune, ia-o logic:
- cand dai un select cu distinct, interogarea iti va returna automat fiecare row cu ce vrei tu. ca sa le afisezi, apelezi o bucla mysql_fetch_ce-vrei-tu (array, object etc).
- dk ai randuri fara imagine, ii faci si tu o kestie simpla cu if/else. exemplu
Cod:
while ($afisare = mysql_fetch_array($rezultat))
{
$imagine=$afisare[ALBUM_THUMB];
if (strlen($imagine)<1)
{
$img="":
}
else
{
$img=$imagine;
}//end else
}//end while
ps asta nu e o kestie incalcita, ci elementara, no offence. |
|
| Sus |
|
sniperhonour
Data înscrierii: 19/Iul/2007
Mesaje: 3
|
| Trimis: Dum Iul 27, 2008 9:24 pm Titlul subiectului: ... |
|
|
daca ma crezi am incercat si eu asa si nu a mers, am incercat si acuma mai atent si tot nu merge...
Deci sa afiseze fiecare album o singura data si in dreptul fiecarui album sa afiseze primul thumb asociat lui ( prin primul thumb ma refer la cel care e asociat albumului respectiv cu ID ul cel mai mic ). |
|
| Sus |
|
olympia
Data înscrierii: 26/Mai/2008
Mesaje: 151
|
| Trimis: Dum Iul 27, 2008 9:35 pm Titlul subiectului: |
|
|
| ok, ce erori iti da? unde se blocheaza scriptul? |
|
| Sus |
|
sniperhonour
Data înscrierii: 19/Iul/2007
Mesaje: 3
|
| Trimis: Dum Iul 27, 2008 9:39 pm Titlul subiectului: |
|
|
nu se blocheaza, si nu da erori. nu face extractia din campul "album_thumb".
Amintesc ca "mysql_query" initial suna asa:
Cod: $request_album = mysql_query("SELECT DISTINCT album_name FROM pgallery"); si am impresia ca aici nu suna bine. ceva nu se leaga... |
|
| Sus |
|
olympia
Data înscrierii: 26/Mai/2008
Mesaje: 151
|
| Trimis: Dum Iul 27, 2008 11:23 pm Titlul subiectului: |
|
|
ai dreptate, problema poate deveni destul de complicata. mi-am adus aminte cat m-a chinuit si pe mine o kestie de genul asta pana am rezolvat-o.
partea buna este ca daca tu cauti combinatiile unice, merge select distinct pe mai multe coloane:
SELECT DISTINCT PICTURE_NAME, ALBUM_NAME, ALBUM_THUMB FROM tabelul tau
afisandu-le direct, fara a mai lua id-ul.
pe de alta parte, exista o contradictie in ce vrei, pentru ca vrei sa afli nr total de albume cu distinct, ceea ce nu merge. pentru nr tot de albume ar trebui o interogare separata.
problema apare din cauza redundantelor din tabela. in mod normal, ca sa poti interoga asa cum vrei baza asta de date, ar trebui 3 tabele, zic io. deci, dk nu ai multa informatie, poti o poti reproiecta. e mult mai usor sa faci niste join-uri dupa aceea.
solutia complicata la tipul asta de tabela, asa cum o vad acum, ar insemna sa bagi totul intr-un array, sa afli row-urile unde ai album unic si sa returnezi cheia numerica la tabloul initial, la ce ai scos din DB.
SELECT DISTINCT PICTURE_NAME, ALBUM_NAME, ALBUM_THUMB FROM tabelul tau
este echivalent cu:
SELECT PICTURE_NAME, ALBUM_NAME, ALBUM_THUMB FROM tabelul tau GROUP BY PICTURE_NAME, ALBUM_NAME, ALBUM_THUMB
deci poate te ajuta asta. vezi ce iti scoate cu distinct pe 3 coloane si dupa aia mai vorbim |
|
| Sus |
|
PHPRomania Bot
Bot Member
Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google |
| Trimis: Mie Dec 26, 2007 7:01 pm Titlul subiectului: Ad |
|
|
|
|
|
| Sus |
|
| |
|