Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

Extractie complicata (incalcita) din Baza de Date
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
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  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community