Har 2 tabeller för att skapa "virtuellt filsystem"
Förenklat ser dessa ut på följande sätt :
Map
************
id
parent_map_id
namn
************
Fil
************
id
parent_map_id
namn
************
Jag vill nu skapa en lista där jag bara vill visa X antal / sida. Det sätt jag tänkt mig är med hjälp av "limit".
För att det ska funka behöver jag lägga samman tabellerna. Jag vill att mapparna visas fösta och filer sedan.
Kommer i tanken såhär långt, men inte längre :
SELECT map.id, map.parent_map_id, map.namn,
(skapa en "mapp" parrameter) fil.id, fil.parent_map_id, fil.namn
FROM
map, fil
WHERE
map.parent_map_id = aktuell_map_id
AND
map.parent_map_id = aktuell_map_id
ORDER BY
(mappar ska visas först)
LIMIT 0, 25
select id
, <aktuellt-mapp-id>
, namn
, 'mapp' as typ
from map
where parent_map_id = <aktuellt-mapp-id>
union all
select id
, <aktuellt-mapp-id>
, namn
, 'fil' as typ
from fil
where parent_map_id = <aktuellt-mapp-id>
order
by case when typ = 'mapp' then 1 else 2 end
, namn
limit 0,25
Har ännu inte hunnit prova fullt ut men jobbar på det. (All tid bara försvinner. "Alla dessa dagar som kom och gick, inte visste jag att det var livet")
Får det inte att funka alls. Mycket beroende på att jag inte helt är med på vad som "beordras" i SQL frågan.
För att förenkla det lite för min över-kokta hjärna så skriver skriver jag in att fil namn heter "content" och att databaserna (tabellerna) heter "_db" efter.
Map_db
************
id
parent_map_id
namn
************
Fil
************
id
parent_map_id
content
************
Tacksam för kommentarer till SQL förfrågan så jag själv vet vad jag har och på så sätt kan fel söka.
select id
, namn as content
, 'mapp' as typ
from map_db
where parent_map_id = <aktuellt-mapp-id>
union all
select id
, content
, 'fil' as typ
from fil_db
where parent_map_id = <aktuellt-mapp-id>
order
by case when typ = 'mapp' then 1 else 2 end
, namn
limit 0,25
Den första delen, ovanför "union all", hämtar alla mappar som ligger i mappen med id = <aktuellt-mapp-id>. Den andra delen, under "union all", hämtar alla filer i mappen med id = <aktuellt-mapp-id>. "Union all" slår samman resultaten till en lista, typ:
Bra, då vet ja att jag tänkte rätt. Så långt kom jag också. Dock blev jag osäker då det ändå inte funkade ändå, men det är bra att jag nu vet att jag tänker rätt. Ska klura lite till får vi se.
Lite för avacnerade grejer för mitt lilla projekt. Intresant dock att se hur mycket SQL kan användas till då man själv bara sniffar lätt på ytan och knappt det.
I Map är namn "varchar(255)" och i Fil, som inte har namn utan istället content, är det en "text". När jag tar "content as name" blir det bara "1" i "name" för filerna :-(
Inser att raden "case when typ='mapp' then 1 else 2 end" inte funkar (hade tagit bort den och därför blivit glad när det äntligen hoppade igång). Kan det vara versionen av MySQL ? Spelar ingen roll då jag kan bara köra en "ORDER BY typ" så funkar det ändå.
(Skickar här med SQL frågan rakt av och hoppas att ni förstår tabell uppbyggnaden)
Denna ger "281" ur name när det är "fil", men helt okej på "mapp":
SELECT id, name, container_id, 'mapp' as typ FROM fw_container WHERE container_id=[I]281[/I] UNION ALL
SELECT id, container_id, [B]content as name[/B], 'fil' as typ from fw_content WHERE container_id=[I]281[/I]
ORDER BY typ DESC, name limit 0,25
Denna funkar inte alls:
SELECT id, name, container_id, 'mapp' as typ FROM fw_container WHERE container_id=[I]281[/I] UNION ALL
SELECT id, container_id, [B]content[/B], 'fil' as typ from fw_content WHERE container_id=[I]281[/I]
ORDER BY typ DESC, name, [B]content[/B] limit 0,25
Snanders spikar sanningen. Jag gissar att det du vill göra är typ detta:
SELECT id, name, container_id, null as content, 'mapp' as typ FROM fw_container WHERE container_id=281 UNION ALL
SELECT id, name, container_id, content, 'fil' as typ from fw_content WHERE container_id=281
ORDER BY typ DESC, name, content limit 0,25
Ang. namn i filer : När jag skapade tabellen ansåg jag att filerna inte behövde namn, men jag har insett att det nu vore bra, men då jag har ca 1000 poster nu vet jag inte om jag har ett bra sätt att fylla namnfältet automatiskt på.
Kan man ta första raden i fältet content och automatsikt lägga in i fältet namn automatiskt ?