/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Forum i træstruktur opbygget i mysql og ph~
Fra : Karsten Fisker


Dato : 15-12-03 18:19

Jeg har brug for hjælp......

Jeg har tidligere oprettet lignende spørgsmål, men enten har jeg ikke kunnet
formulere mig godt nok, eller også er det bare for hård en nød at knække.

Hjælp, eller i det hele tage respons vedr. nedenstående er mere end
velkommen.

Her er tabellen "b91_forum":
beskednr hovedtraad tilhoersforhold headline besked
1000000001 1000000001 NULL 1
1000000002 1000000002 NULL 2
1000000003 1000000002 1000000002 2.1
1000000004 1000000002 1000000003 2.1.1
1000000005 1000000001 1000000001 1.1
1000000006 1000000002 1000000002 2.2
1000000007 1000000001 1000000001 1.2
1000000008 1000000001 1000000007 1.2.1
1000000009 1000000001 1000000001 1.3
1000000010 1000000001 1000000007 1.2.2

Hele idéen er at tabelfelterne benyttes på følgende måde:
beskednr: Benyttes til at identificere hver enkelt besked
hovedtraad: Angiver hvilken hovedtråd hver enkelt besked hører til
tilhoersforhold: Angiver hvilken tråd hver besked hører til
headline: Beskedens overskrift
besked: Selve beskeden

Hentet korrekt fra databasen, vil en udskrift af data se således ud:
1
1.1
1.2
1.2.1
1.2.2
1.3
2
2.1
2.1.1
2.2

Som I kan se, er det opbygget som en træstruktur (alá www.debatside.dk).

Jeg forventer ikke at få det hele serveret på et sølvfad, men kunne godt
bruge noget hjælp til at få den grundlæggende opbygning på plads.

Er designet af databasen helt hen i vejret, kan det også ændres.

Jeg kan simpelthen ikke gennemskue hvordan jeg får den ønskede opstilling.



 
 
Nezar Nielsen (15-12-2003)
Kommentar
Fra : Nezar Nielsen


Dato : 15-12-03 18:55

Karsten Fisker wrote:

>
> Her er tabellen "b91_forum":
> beskednr hovedtraad tilhoersforhold headline besked
> 1000000001 1000000001 NULL 1
> 1000000002 1000000002 NULL 2
> 1000000003 1000000002 1000000002 2.1
....

> Hele idéen er at tabelfelterne benyttes på følgende måde:
> beskednr: Benyttes til at identificere hver enkelt besked
> hovedtraad: Angiver hvilken hovedtråd hver enkelt besked hører til
> tilhoersforhold: Angiver hvilken tråd hver besked hører til
> headline: Beskedens overskrift
> besked: Selve beskeden
>
> Hentet korrekt fra databasen, vil en udskrift af data se således ud:
> 1
> 1.1
> 1.2
> 1.2.1
> 1.2.2
....
> Jeg kan simpelthen ikke gennemskue hvordan jeg får den ønskede opstilling.

Hm, jeg må overse et ellerandet, eller også forstår jeg bare ikke hvad
problemet er, men hvis jeg bare laver en tabel i stil med din[1] kan jeg
da bare sortere efter koordinatfeltet ?

nnbasicloen=> select * from test order by yada;
yada | something
-------+-----------
1 | såder
1.1 | er
1.1.1 | der
1.1.2 | der
1.2.1 | der
2 | fumlefisk
2.1 | hej
2.1.2 | der
2.2 | er


[1] create table test(yada varchar(255), something varchar(255));

--
Mvh. Nezar Nielsen
http://fez.dk


Adam Sjøgren (15-12-2003)
Kommentar
Fra : Adam Sjøgren


Dato : 15-12-03 19:01

On Mon, 15 Dec 2003 18:55:12 +0100, Nezar wrote:

> men hvis jeg bare laver en tabel i stil med din[1] kan jeg da bare
> sortere efter koordinatfeltet ?

> nnbasicloen=> select * from test order by yada;
> yada | something
> -------+-----------
> 1 | såder
> 1.1 | er
> 1.1.1 | der
> 1.1.2 | der
> 1.2.1 | der
> 2 | fumlefisk
> 2.1 | hej
> 2.1.2 | der
> 2.2 | er

test=> select * from test order by yada;
yada | something
------+-------------
1.11 | Senere emne
1.2 | Emne
(2 rows)

?

Mvh.

--
"Kom låna törnekronan min Adam Sjøgren
Lid för konsten eller brinn" asjo@koldfront.dk

Nezar Nielsen (16-12-2003)
Kommentar
Fra : Nezar Nielsen


Dato : 16-12-03 10:09

Adam Sjøgren wrote:

> yada | something
> ------+-------------
> 1.11 | Senere emne
> 1.2 | Emne

oops.

/N


Karsten Fisker (15-12-2003)
Kommentar
Fra : Karsten Fisker


Dato : 15-12-03 21:18


"Nezar Nielsen" <tumpen@fez.dk> skrev i en meddelelse
news:brksi6$4bvsd$1@ID-179598.news.uni-berlin.de...
> Karsten Fisker wrote:
>
> >
> > Her er tabellen "b91_forum":
> > beskednr hovedtraad tilhoersforhold headline besked
> > 1000000001 1000000001 NULL 1
> > 1000000002 1000000002 NULL 2
> > 1000000003 1000000002 1000000002 2.1
> ...
>
> > Hele idéen er at tabelfelterne benyttes på følgende måde:
> > beskednr: Benyttes til at identificere hver enkelt besked
> > hovedtraad: Angiver hvilken hovedtråd hver enkelt besked hører til
> > tilhoersforhold: Angiver hvilken tråd hver besked hører til
> > headline: Beskedens overskrift
> > besked: Selve beskeden
> >
> > Hentet korrekt fra databasen, vil en udskrift af data se således ud:
> > 1
> > 1.1
> > 1.2
> > 1.2.1
> > 1.2.2
> ...
> > Jeg kan simpelthen ikke gennemskue hvordan jeg får den ønskede
opstilling.
>
> Hm, jeg må overse et ellerandet, eller også forstår jeg bare ikke hvad
> problemet er, men hvis jeg bare laver en tabel i stil med din[1] kan jeg
> da bare sortere efter koordinatfeltet ?
Et stort problem ved at lave "den simple version", er at alle nye beskeder
vil komme nederst, hvilket de også skal. En ny tråd derimod, skal være
øverst i hierarkiet.
Laves der omvendt sortering, tjah så er det nye beskeder i undertrådene der
kommer forkert.

Hmmm... det burde selvfølgelig være muligt at lave en rutine der opdeler
alle hovedtråde i et array, så den nyeste hovedtråd kan komme øverst?

Den visuelle del, der viser alle trådene med undertråde, så man kan se
hvorledes det hele hænger sammen, kan måske laves ved at checke for antallet
af punktummer (eller hvad man nu vælger at bruge som skilletegn). Beskednr
(som kan være et unix timestamp), kan selvfølgelig bruges til at vise
hovedtrådene i rigtig rækkefølge....

Tror det efterhånden begynder at dæmre.
Dog kan det blive nogle sjove felter der efterhånden dukker op
(1.1.2.3.1.2.3.2.1.2.3.2.1.2.3.2.1.2.3), hvis altså der er en lang tråd.

Det burde være muligt....

Tak for hjælpen Nezar, det var vist lige hvad jeg havde brug for..... et
ekstra øje (eller to), til at kigge på sagen.....

>
> nnbasicloen=> select * from test order by yada;
> yada | something
> -------+-----------
> 1 | såder
> 1.1 | er
> 1.1.1 | der
> 1.1.2 | der
> 1.2.1 | der
> 2 | fumlefisk
> 2.1 | hej
> 2.1.2 | der
> 2.2 | er
>
>
> [1] create table test(yada varchar(255), something varchar(255));
>
> --
> Mvh. Nezar Nielsen
> http://fez.dk
>



Johan Holst Nielsen (15-12-2003)
Kommentar
Fra : Johan Holst Nielsen


Dato : 15-12-03 22:35

Karsten Fisker wrote:

> "Nezar Nielsen" <tumpen@fez.dk> skrev i en meddelelse
> news:brksi6$4bvsd$1@ID-179598.news.uni-berlin.de...
>
>>Karsten Fisker wrote:
>>
>>
>>>Her er tabellen "b91_forum":
>>>beskednr hovedtraad tilhoersforhold headline besked
>>>1000000001 1000000001 NULL 1
>>>1000000002 1000000002 NULL 2
>>>1000000003 1000000002 1000000002 2.1
>>
> Hmmm... det burde selvfølgelig være muligt at lave en rutine der opdeler
> alle hovedtråde i et array, så den nyeste hovedtråd kan komme øverst?

SELECT ... FROM b91_forum ORDER BY hovedtraad DESC, tilhoersforhold ASC
(uden at have tænk yderligere over det ;))

> Den visuelle del, der viser alle trådene med undertråde, så man kan se
> hvorledes det hele hænger sammen, kan måske laves ved at checke for antallet
> af punktummer (eller hvad man nu vælger at bruge som skilletegn). Beskednr
> (som kan være et unix timestamp), kan selvfølgelig bruges til at vise
> hovedtrådene i rigtig rækkefølge....

Man må formode at beskednr er et frontløbende nummer. Så det kan
ligesåvel bruges sådan :)

mvh
Johan


Tonni Aagesen (16-12-2003)
Kommentar
Fra : Tonni Aagesen


Dato : 16-12-03 10:55

Karsten Fisker wrote:

> Jeg forventer ikke at få det hele serveret på et sølvfad, men kunne godt
> bruge noget hjælp til at få den grundlæggende opbygning på plads.
>
> Er designet af databasen helt hen i vejret, kan det også ændres.
>
> Jeg kan simpelthen ikke gennemskue hvordan jeg får den ønskede opstilling.

Du skal have gang i begrebet "rekursiv" - enten i din SQL sætning eller
din PHP kode.

Understøtter din database subselects?

Det lyder også mere som et spørgsmål til news:dk.edb.database

Mvh
Tonni

Karsten Fisker (16-12-2003)
Kommentar
Fra : Karsten Fisker


Dato : 16-12-03 16:53

Jeg er absolut ikke en haj til hverken php eller mysql, og har derfor holdt
mig væk fra de lidt mere langhårede kommandoer.

Dog har jeg fået det til at fungere som ønsket ved at bruge følgende kode:
$query_hovedtraade = mysql_query("SELECT hovedtraad
FROM b91_forum
WHERE beskednr = hovedtraad
ORDER BY beskednr");

while ($row_hovedtraade = mysql_fetch_assoc($query_hovedtraade))
{
$hovedtraad = $row_hovedtraade[hovedtraad];
$query_forum = mysql_query("SELECT *
FROM b91_forum
WHERE hovedtraad = $hovedtraad
ORDER BY headline ASC");

while ($row_forum = mysql_fetch_assoc($query_forum))
{
$headline_org = $row_forum[headline];
$counter = strlen(ereg_replace('[^[:punct:]]','',$headline_org));

$i = 0;
$mellemrum = "";
while ($i < $counter)
{
$mellemrum = $mellemrum."&nbsp;&nbsp;&nbsp;";
$i ++;
}
echo $mellemrum.$row_forum[headline];
echo "<br>";
}
}

Headline-feltet vil selvfølgelig blive et nyt felt, der skal styre level.
Hver hovedtråd får sit eget unikke nr, og ved svar til en hovedtråd, vil den
nye besked få et levelnummer der er hovedtrådens nummer, samt et punktum, og
et nyt unikt nummer.
På den måde vil sorteringen altid vises korrekt.

Mvh
Karsten
"Tonni Aagesen" <use.my@signature.please> skrev i en meddelelse
news:brmkm6$gdm$1@sunsite.dk...
> Karsten Fisker wrote:
>
> > Jeg forventer ikke at få det hele serveret på et sølvfad, men kunne godt
> > bruge noget hjælp til at få den grundlæggende opbygning på plads.
> >
> > Er designet af databasen helt hen i vejret, kan det også ændres.
> >
> > Jeg kan simpelthen ikke gennemskue hvordan jeg får den ønskede
opstilling.
>
> Du skal have gang i begrebet "rekursiv" - enten i din SQL sætning eller
> din PHP kode.
>
> Understøtter din database subselects?
>
> Det lyder også mere som et spørgsmål til news:dk.edb.database
>
> Mvh
> Tonni



Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste