Har idag ett script för att lista massa data från en MySQL (5.0) databas. Så här ser databasen ut:
[i]doc_lang[/i]
lang_id, INT
land_name, VARCHAR
[i]doc_access[/i]
user_id, INT
lang_id, INT
[i]doc_page[/i]
page_id, INT
page_parent, INT (alltid = 3 för tillfället)
page_name, VARCHAR
[i]doc_name[/i]
doc_id, INT
doc_parent, INT ([i]doc_page.page_id[/i])
doc_name, VARCHAR
[i]doc_content[/i]
cont_id, INT
cont_parentid, INT ([i]doc_name.doc_id[/i])
cont_language, INT ([i]doc_lang.lang_id[/i])
cont_text, TEXT
cont_updated, INT (UNIX_TIMESTAMP)
Det jag nu ska göra är att:
Hämta alla page_name, doc_name, lang_name (som man har behörighet att se)
Lista allt från doc_content som tillhör resp. sida / språk
Endast den senaste versionen från doc_content ska hämtas
Går det här att få ihop till en fråga med flera JOIN?
Just nu körs som sagt 3 olika sqlfrågor och sidan tar uppåt 2 minuter att ladda, och det är inte så effektivt.
select p.page_name
, n.doc_name
, l.lang_name
from doc_page p
inner
join doc_name n
on p.page_id = n.doc_parent
inner
join doc_content c
on n.doc_id = c.cont_parentid
inner
join doc_lang l
on c.cont_language = l.lang_id
where l.lang_id
in ( select lang_id
from doc_access
where user_id = <user-id> )
and c.cont_updated
= ( select max(cont_updated)
from doc_content
where cont_parentid = c.cont_parentid )
Det funkar nästan, kom på att det nog inte funkar med en fråga. Om ni kollar den bifogade bilden, så skrivs allt ut idag.
Det som är My account är page_name och Account updated är doc_name.
Där cont_id inte existerar för nuvarande cont_parentid samt cont_language ska en "tom" ruta likt den gråa dyka upp.
Måste även presentera alla språk innan varje kategori, så det är nog tveksamt om jag klarar mig på en fråga.
Problemet jag har nu är att jag loopar igenom alla doc_page och inuti den loopen har jag en for-loop där jag kör igenom alla språk och det är väldigt ooptimalt och säkert helt onödigt, men jag har slut på idéer.
Tacksam för några förslag.
258 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e