Mr TMedlem sedan maj 20071 061 inlägg 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
Peter SMedlem sedan dec. 20025 483 inlägg 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
Mr TMedlem sedan maj 20071 061 inlägg 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")
Mr TMedlem sedan maj 20071 061 inlägg (Äntligen lite tid över...)
Varför ska jag ha ett id nummer i efter id ? Menar du "parent_map_id" ?
Inser att jag i "filer" kallar "name" för "content". Men borde väll gå att skriva "name as content" ?
Peter SMedlem sedan dec. 20025 483 inlägg Jag tog bara med alla fält i tabellerna; det går utmärkt att ta bort id från select-listorna :)
Japp, namn kan du byta mot content.
Mr TMedlem sedan maj 20071 061 inlägg 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.
Peter SMedlem sedan dec. 20025 483 inlägg 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:
1 mapp1 mapp
2 mapp2 mapp
3 mapp3 mapp
1 fil1 fil
2 fil2 fil
3 fil3 fil
Mr TMedlem sedan maj 20071 061 inlägg 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.
Mr TMedlem sedan maj 20071 061 inlägg 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.
Mr TMedlem sedan maj 20071 061 inlägg Äntligen fick jag det att börja funka. Vet inte vad jag har gjort för skillnader innan, men nu börjar det funka i alla flal.
tack !
Mr TMedlem sedan maj 20071 061 inlägg ...ropa hej innan osv..... :-(
Upptäcker 2 grejer som inte alls funkar.
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å.
Mr TMedlem sedan maj 20071 061 inlägg Vänder på det!
Map
namn varchar(255)
Fil
content text
istället för "content as name" i Fil gör jag "name as content" i Map ( och naturligtvis "ORDER BY content").
Tyvärr är "1" det enda som finns i Fil "content".
Why !?!?!??!
Mr TMedlem sedan maj 20071 061 inlägg Jag blir inte klok på detta !
(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
Tacksam för hjälp.
@ndersMedlem sedan juni 200032 969 inlägg Du får ett resultatset - du kan ju inte ha olika fältnamn på dina två select-satser i din union.
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
Har för övrigt filerna inget eget namn?
Mr TMedlem sedan maj 20071 061 inlägg Ska genast prova denna nya SQL förfrågan.
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 ?
Mr TMedlem sedan maj 20071 061 inlägg SUPER !!! med en liten "null as name" i fil frågan (tills jag får till ett namn fält med något i) så funkar det nu super !
Ett jätte tack för hjälpen!
Nu är bara frågan hur man tar fram första raden (X antal tecken tills return) ur contetn och får den till fältet namn. Några ideer ?
@ndersMedlem sedan juni 200032 969 inlägg borde väl gå typ så här:
update fw_content set name = left(content, instr('\n'))
Gör en select på detsamma först så du ser om det blir rätt.
Mr TMedlem sedan maj 20071 061 inlägg
@nders skrev:
borde väl gå typ så här:
update fw_content set name = left(content, instr('\n'))
Gör en select på detsamma först så du ser om det blir rätt.
En mindre justering så funkade det perfeckt ! Stor tack !
update `fw_content` set name = left(content, instr(content,'\n')) WHERE 1