/ 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
Tanker omkring multithreading
Fra : Thomas P


Dato : 03-07-01 12:14

I forbindelse med et debatforum jeg er i gang med at skrive, har jeg fundet
ud af, at det ikke er nok med kun én tråd. Man skal også kunne oprette
undertråde, der altså resulterer i begrebet multithreading. Dette er jo så
lidt mere avanceret end som så - jeg har gjort mig en masse tanker om
hvordan jeg vil gøre det, men det synes lidt svært at få brikkerne til at
falde på plads; så måske I kunne hjælpe mig lidt ? I forvejen er hele
forummet lavet, og da der kun er et forum har jeg bare et table ved navn
debate der styrer debatten. Dette table indeholder oplysninger som subject,
text, author osv. Nu kunne jeg så forestille mig at skulle tilføle et
int(4), jeg kalder level til at holde styr på hvor langt oppe i hierarkiet
indlægget er placeret. Når jeg så skal vise de forskellige undertråde kommer
problemet så - hvordan kan jeg dog vise dem i rigtig rækkefølge hvis man
forestiller sig følgende struktur:

indlæg a
indlæg b
- indlæg b-a
- indlæg b-b
- indlæg b-b-a
indlæg c

Hvis nogen har et forslag eller kan hjælpe mig, vil det være guld værd !

--
- Thomas
~~~~~~~~
.... http://www.FlowCode.f2s.com - where code flows
.... mailto:blomme@post.com - where email goes



 
 
Rasmus E. Simonsen (03-07-2001)
Kommentar
Fra : Rasmus E. Simonsen


Dato : 03-07-01 12:55

> I forbindelse med et debatforum jeg er i gang med at skrive, har jeg
fundet
> ud af, at det ikke er nok med kun én tråd. Man skal også kunne oprette
> undertråde, der altså resulterer i begrebet multithreading.

Nu skal du passe på ikke at forvirre folk. Multithreading høres ofte i
forbindelse med flere "operativ systems tråde". Altså en del af den kørende
application. Hvis du ikke forstod dette, så lad det ligge. Det har intet med
resten af svaret at gøre.

> I forvejen er hele
> forummet lavet, og da der kun er et forum har jeg bare et table ved navn
> debate der styrer debatten. Dette table indeholder oplysninger som
subject,
> text, author osv. Nu kunne jeg så forestille mig at skulle tilføle et
> int(4), jeg kalder level til at holde styr på hvor langt oppe i hierarkiet
> indlægget er placeret. Når jeg så skal vise de forskellige undertråde
kommer
> problemet så - hvordan kan jeg dog vise dem i rigtig rækkefølge hvis man
> forestiller sig følgende struktur:
>
> indlæg a
> indlæg b
> - indlæg b-a
> - indlæg b-b
> - indlæg b-b-a
> indlæg c
>
> Hvis nogen har et forslag eller kan hjælpe mig, vil det være guld værd !

Jeg ville indføre en id og en parent. Lidt ala
i=id p=parent, p=0 betyder at det er en ny tråd.

i1p0-i2p1
-i3p1
i4p0-i5p4-i6p5
-i7p5
-i8p4-i9p8


Som det nok fremgår så er indlæg 2 et svar på indlæg 1 da 2s parent er 1.
Man kunne også lave en linktabel med id og children. Så ville ovenstående
træ se således ud:

id-children
1-2
1-3
4-5
5-6
5-7
4-8
8-9

Håber det giver mening ellers skriv igen.

/rs




Thomas P (04-07-2001)
Kommentar
Fra : Thomas P


Dato : 04-07-01 19:19

> Nu skal du passe på ikke at forvirre folk. Multithreading høres ofte i
> forbindelse med flere "operativ systems tråde". Altså en del af den
kørende
> application. Hvis du ikke forstod dette, så lad det ligge. Det har intet
med
> resten af svaret at gøre.

Jeg arbejder selv en del med Object Pascal, så jeg er fuldt klar over hvad
der kan misforstås - her er meldingen så : "Misforstå ikke !-)".

> Jeg ville indføre en id og en parent. Lidt ala
> i=id p=parent, p=0 betyder at det er en ny tråd.
>
> i1p0-i2p1
> -i3p1
> i4p0-i5p4-i6p5
> -i7p5
> -i8p4-i9p8
>
>
> Som det nok fremgår så er indlæg 2 et svar på indlæg 1 da 2s parent er 1.
> Man kunne også lave en linktabel med id og children. Så ville ovenstående
> træ se således ud:
>
> id-children
> 1-2
> 1-3
> 4-5
> 5-6
> 5-7
> 4-8
> 8-9
>
> Håber det giver mening ellers skriv igen.

Tak for dit svar ! Jeg må dog nok erkende at jeg ikke forstår det fuldt ud,
især ikke denne algoritme eller hvad det er:

> i1p0-i2p1
> -i3p1
> i4p0-i5p4-i6p5
> -i7p5
> -i8p4-i9p8

Er det måden hvorpå jeg kan opstille de forskellige indlæg efter hvilken
parent de har ?

--
- Thomas
~~~~~~~~
.... http://www.FlowCode.f2s.com - where code flows
.... mailto:blomme@post.com - where email goes



Jacob Bunk Nielsen (04-07-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 04-07-01 19:58

"Thomas P" <blomme@post.com> writes:

> > i1p0-i2p1
> > -i3p1
> > i4p0-i5p4-i6p5
> > -i7p5
> > -i8p4-i9p8
>
> Er det måden hvorpå jeg kan opstille de forskellige indlæg efter hvilken
> parent de har ?

Det er en måde du kan tråde på.
Indlæg med id 1 og 4 har ikke nogen parent, derfor p0.
Indlæg med id 2 og 3 har indlægget med id 1 som parent, derfor p1.
Indlægget med id 5 har indlægget med id 4 som parent, derfor p4.
Indlæg med id 6 og 7 har indlægget med id 5 som parent, derfor p5.
Indlægget med id 8 har indlægget med id 4 som parent, derfor p4.
Indlægget med id 9 har indlægget med id 8 som parent, derfor p8.

Kan du se mønsteret?

--
Jacob
How do I install Linux, there is no setup.exe?

http://www.bunk.cc - nu med Emacs effekt

Thomas P (05-07-2001)
Kommentar
Fra : Thomas P


Dato : 05-07-01 09:35

> Det er en måde du kan tråde på.
> Indlæg med id 1 og 4 har ikke nogen parent, derfor p0.
> Indlæg med id 2 og 3 har indlægget med id 1 som parent, derfor p1.
> Indlægget med id 5 har indlægget med id 4 som parent, derfor p4.
> Indlæg med id 6 og 7 har indlægget med id 5 som parent, derfor p5.
> Indlægget med id 8 har indlægget med id 4 som parent, derfor p4.
> Indlægget med id 9 har indlægget med id 8 som parent, derfor p8.

Nååårh ! Sådan Så mangler jeg bare en funktion til at få dem til at
opføre sig sådan...

--
- Thomas
~~~~~~~~
.... http://www.FlowCode.f2s.com - where code flows
.... mailto:blomme@post.com - where email goes



Tonni Aagesen (04-07-2001)
Kommentar
Fra : Tonni Aagesen


Dato : 04-07-01 20:07


"Thomas P" <blomme@post.com> skrev i en meddelelse
news:3b41a87e$0$280$edfadb0f@dspool01.news.tele.dk...
> "hvordan holder jeg styr på indlæggene" /rettet af undertegnede

Måden jeg selv har løst det på er at give hvert indlæg et alm. ID og et
REF_ID, hvor REF_ID fører tilbage til det indlæg der bliver svaret på.
F.eks:

Indlæg (ID - REF_ID)

Hej (1 - 0)
Re: Hej (2 - 1)
Re: Hej (3 - 1)
Re: Hej (4 - 3)
Re: Hej (5 - 4)
Dav (6 - 0)
Re: Dav (7 - 6)

Så kan du lave en rekursiv funktion, der søger alle posterne igennem:

function traad($id) {
$result = mysql_query("ID FROM table WHERE REF_ID = $id");
while ($row = mysql_fetch_row($result)) {
$tmpID = $row[0];
traad($tmpID);
}
}

(indeholder sikkert nogle fejl i syntaksen, er taget fra hukommelsen)

Prøv at bakse lidt med det. Hvis du vil se min kildekode, kan du lige skrive
det her, så skal jeg sende den til dig.

Mvh
Tonni Aagesen



Thomas P (05-07-2001)
Kommentar
Fra : Thomas P


Dato : 05-07-01 09:35

> Måden jeg selv har løst det på er at give hvert indlæg et alm. ID og et
> REF_ID, hvor REF_ID fører tilbage til det indlæg der bliver svaret på.
> F.eks:
>
> Indlæg (ID - REF_ID)
>
> Hej (1 - 0)
> Re: Hej (2 - 1)
> Re: Hej (3 - 1)
> Re: Hej (4 - 3)
> Re: Hej (5 - 4)
> Dav (6 - 0)
> Re: Dav (7 - 6)
>
> Så kan du lave en rekursiv funktion, der søger alle posterne igennem:
>
> function traad($id) {
> $result = mysql_query("ID FROM table WHERE REF_ID = $id");
> while ($row = mysql_fetch_row($result)) {
> $tmpID = $row[0];
> traad($tmpID);
> }
> }
>
> (indeholder sikkert nogle fejl i syntaksen, er taget fra hukommelsen)
>
> Prøv at bakse lidt med det. Hvis du vil se min kildekode, kan du lige
skrive
> det her, så skal jeg sende den til dig.

Det lyder helt sikkert som noget af det jeg skal have fat i ! Kiggede lidt
på kildekoden til phorum for måske at aflure tricket, men det er vist ingen
underdrivelse hvis jeg siger at phorum er uoverskueligheden selv Hvis du
gerne vil sende din multithreading-kode, skal jeg være dig dybt taknemmelig
!

--
- Thomas
~~~~~~~~
.... http://www.FlowCode.f2s.com - where code flows
.... mailto:blomme@post.com - where email goes



Thomas P (05-07-2001)
Kommentar
Fra : Thomas P


Dato : 05-07-01 12:37

> function traad($id) {
> $result = mysql_query("ID FROM table WHERE REF_ID = $id");
> while ($row = mysql_fetch_row($result)) {
> $tmpID = $row[0];
> traad($tmpID);
> }
> }

Hej igen, og mange tak for din rekursivitetskode. Den fungerer faktisk
(næsten) perfekt, men jeg har dog nogle problemer, jeg godt kunne tænke mig
du eller I andre måske ville hjælpe mig med. Min kode siger nu:

function traad($id) {
$result = mysql_query("SELECT ID FROM debate WHERE parent_id = '$id'");
while ($follow_row = mysql_fetch_row($result)) {
$tmpID = $follow_row[0];
traad($tmpID);
echo "$tmpID<br>";
}
}

Problemet er nu, hvis mit parent_id peger til id 3, bliver det placeret én
gang FØR id 3. Hvis min undertråd så har id 6, og de andre indlæg er 2, 3 og
4, og id 6 er svar til id 3 bliver det placeret over 3. Sådan her:

2
6
3
4

En anden ting jeg også har problemer med, er at genkende hvor langt oppe i
trådsystemet tråden er placeret. Jeg vil nemlig gerne være i stand til at
indsætte nogle grafikker så man kan se trådenes fulde løb ! Ellers mange tak
igen

--
- Thomas
~~~~~~~~
.... http://www.FlowCode.f2s.com - where code flows
.... mailto:blomme@post.com - where email goes



Jacob Bunk Nielsen (05-07-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 05-07-01 13:41

"Thomas P" <blomme@post.com> writes:


> while ($follow_row = mysql_fetch_row($result)) {
> $tmpID = $follow_row[0];
----
> traad($tmpID);
> echo "$tmpID<br>";
----
Byt om på ovenstående to linier, det skulle løse dit problem.

--
Jacob
It compiles, let's ship it!

http://www.bunk.cc - nu med Emacs effekt

Jacob Bunk Nielsen (05-07-2001)
Kommentar
Fra : Jacob Bunk Nielsen


Dato : 05-07-01 13:48

"Thomas P" <blomme@post.com> writes:

> function traad($id) {
> $result = mysql_query("SELECT ID FROM debate WHERE parent_id = '$id'");
> while ($follow_row = mysql_fetch_row($result)) {
> $tmpID = $follow_row[0];
> traad($tmpID);
> echo "$tmpID<br>";
> }
> }

Jeg bliver lige ved ...

Skal du så også have indrykning af undertråde kan du lave noget i
retning af:

function traad($id, $pre) {
$result = mysql_query("SELECT ID FROM debate WHERE parent_id = '$id'");
while ($follow_row = mysql_fetch_row($result)) {
$tmpID = $follow_row[0];
echo $pre . "$tmpID<br>";
traad($tmpID, $pre . "&nbsp;");
}
}

Første gang kalder du så:
traad($id, "");

.... så bliver alle undertråde indrykket med 1 mellemrum pr. niveau,
måske er det en idé med mere indrykning, men du kan nok se idéen. Hvis
du har mod på det (og dine klienter kan finde ud af det) kan du også
lavet noget med CSS og layers, men det hører vist ikke til her

--
Jacob
"There's an old story about the person who wished his computer were
as easy to use as his telephone. That wish has come true, since I no
longer know how to use my telephone." -- Stroustrup

Thomas P (05-07-2001)
Kommentar
Fra : Thomas P


Dato : 05-07-01 14:16

>function traad($id, $pre) {
> $result = mysql_query("SELECT ID FROM debate WHERE parent_id = '$id'");
> while ($follow_row = mysql_fetch_row($result)) {
> $tmpID = $follow_row[0];
> echo $pre . "$tmpID<br>";
> traad($tmpID, $pre . "&nbsp;");
> }
>}

Det virker jo det her ! Eneste requests er nu hvordan jeg kan finde ud
af om det er den sidste i undertråden, da der så skal bruges en anden
grafik... tak for koden !
- Thomas Plougsgaard
[blomme@post.com]
[http://www.flowcode.f2s.com]

Rasmus E. Simonsen (05-07-2001)
Kommentar
Fra : Rasmus E. Simonsen


Dato : 05-07-01 14:39


> >function traad($id, $pre) {
> > $result = mysql_query("SELECT ID FROM debate WHERE parent_id = '$id'");
> > while ($follow_row = mysql_fetch_row($result)) {
> > $tmpID = $follow_row[0];
> > echo $pre . "$tmpID<br>";
> > traad($tmpID, $pre . "&nbsp;");
> > }
> >}
>
> Det virker jo det her ! Eneste requests er nu hvordan jeg kan finde ud
> af om det er den sidste i undertråden, da der så skal bruges en anden
> grafik... tak for koden !

Nu er det jo ikke fordi der bliver sparet på SQL opslag i denne kode
dobbelt så mange burde kunne gøre det.

Du kunne jo spørge DBen ved hvert indlæg om der var nogle som pegede på
dette indlæg ("SELECT id FROM debate WHERE parent_id='$id'" og brug
mysql_numrows($res). Ellers er mit umiddelbare bud at du først indsamler din
viden om tråden og skriver den ud bagefter.

/rs



Tonni Aagesen (06-07-2001)
Kommentar
Fra : Tonni Aagesen


Dato : 06-07-01 02:45


"Thomas P" <blomme@post.com> skrev i en meddelelse
news:3b4450ba$0$12852$edfadb0f@dspool01.news.tele.dk...

[snip]
> Hej igen, og mange tak for din rekursivitetskode. Den fungerer faktisk
> (næsten) perfekt
[snap]

Det var da godt, så skipper jeg lige at sende dig noget kode, for min server
er nede i øjeblikket
Men jeg vil da gerne se dit forum i praksis, smid evt. et link i denne NG.

Mvh
Tonni Aagesen



Thomas P (06-07-2001)
Kommentar
Fra : Thomas P


Dato : 06-07-01 13:59

> Det var da godt, så skipper jeg lige at sende dig noget kode, for min
server
> er nede i øjeblikket
> Men jeg vil da gerne se dit forum i praksis, smid evt. et link i denne NG.

Det vil jeg gøre ! Dog først når jeg har gennemarbejdet det helt, og har
fundet ud af at lave rigtige grafik-ikoner udfor de forskellige tråde, så
det kommer til at stå i et trådtræ, man kan se fuldt ud Jeg studerer
stadigvæk phorums multi-threads.php for at finde ud af hvordan phorum gør
det ... det er desværre ikke lykkedes mig endnu ;-(

--
- Thomas
~~~~~~~~
.... http://www.FlowCode.f2s.com - where code flows
.... mailto:blomme@post.com - where email goes



Søg
Reklame
Statistik
Spørgsmål : 177554
Tips : 31968
Nyheder : 719565
Indlæg : 6408852
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste