webForumDet fria alternativet

Hämta data från tre tabeller

2 svar · 376 visningar · startad av MickeA.com

MickeA.comMedlem sedan feb. 20034 441 inlägg
#1

Hej!
Jag försöker få ihop det sista i en portfolio som jag gjort.
Det ser ut såhär:
- Tre tabeller, Kategori, Projekt och Bild.
- Det kan finnas x antal kategorier.
- Det kan finnas x antal projekt i en kategori.
- Det kan finnas x antal bilder till ett projekt.

Tabellstrukturen ser ut såhär:

portfolio_cat (kategorier)
pcat_id    (ID, INT)
pcat_name  (Namn, VARCHAR)
pcat_order  (Visningsordning, INT)

portfolio_content (projekt)
pcon_id     (ID, INT)
pcon_parent (Kategori, INT)
pcon_name   (Namn, VARCHAR)
pcon_order  (Visningsordning, INT)

portfolio_picture (bilder)
ppic_id     (ID, INT)
ppic_parent (Projekt, INT)
ppic_order  (Visningsordning, INT)

Såhär ser min fråga ut:

SELECT 
a.pcat_id, a.pcat_name, 
b.pcon_id, b.pcon_parent, b.pcon_name, b.pcon_text, 
c.ppic_id, c.ppic_parent, c.ppic_uri, 
FROM portfolio_cat a, portfolio_content b, portfolio_picture c 
WHERE a.pcat_id = b.pcon_parent 
AND b.pcon_id = c.ppic_parent 
ORDER BY a.pcat_order ASC, b.pcon_order ASC, c.ppic_order ASC

Nu är tanken att kategorier, projekt och bilder ska hämtas, allt ska sorteras efter resp. visnings ordning, alltså först sorterat på kategori-ordning, sen projekt-ordning och till sist bild-ordning.
Jag har försökt med ovanstående, men resultatet blir att endast ett projekt hämtas - 10 gånger.

Nu skulle jag behöva lite tips på hur jag ska lösa det här, tror att jag tänker helt fel.

Säg till om ni behöver mer input, just det, sidan är skriven i PHP och DBMS är MySQL 4.x

Tack!

TravoniMedlem sedan okt. 20041 556 inlägg
#2

Så här kanske:

SELECT 
a.pcat_id, a.pcat_name, 
b.pcon_id, b.pcon_parent, b.pcon_name, b.pcon_text, 
c.ppic_id, c.ppic_parent, c.ppic_uri, 
FROM portfolio_content b
INNER JOIN portfolio_cat a ON a.pcat_id = b.pcon_parent
LEFT JOIN portfolio_picture c ON b.pcon_id = c.ppic_parent
ORDER BY a.pcat_order, b.pcon_order, c.ppic_order
MickeA.comMedlem sedan feb. 20034 441 inlägg
#3

Hej igen,
Ovanstående funkade inte så bra heller, jag kanske har varit lite otydlig.
Nu gjorde jag iaf, såhär:

SELECT
a.pcat_id, a.pcat_name, 
b.pcon_id, b.pcon_parent, b.pcon_name, b.pcon_text 
FROM portfolio_cat a INNER JOIN portfolio_content b 
ON a.pcat_id = b.pcon_parent 
ORDER BY a.pcat_order ASC, b.pcon_order ASC

Jag struntar helt i att plocka ut bilderna från början, här hämtas endast kategorier / projekt.
Det fungerar som jag vill, tror jag gör såhär och hämtar sedan ut bilderna till varje projekt i loopen.

Eller finns det något annat sätt?

Saken är den att ev. bilder ska visas i lightbox, med paging, så det funkar på ett litet speciellt sätt.
I själva loopen (om det finns bilder) ska endast den första bilden synas, de andra ska sparas i en array och loopas ut efter att alla projekt loopats ut, för att lightboxen ska lira schysst.

130 ms totalt · 3 externa anrop · v20260731065814-full.86db40fa
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)