/ 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
problemem med while
Fra : Kasper B. Rasmussen


Dato : 11-08-02 16:20

Hej..
Jeg er igang med at lave et forum hvor det er muligt at besvare indlæg fra
andre..
Jeg har lavet følgende script til at hente indlæg og besvarelser fra
databasen:

----------------------------------------------

$debat = mysql_query("select * from debat");
while ($data = mysql_fetch_row($debat)){
if ($data[3] == 1){
echo $data[1];
echo "<br>";
echo $data[2];
$emne = $data[1];

while ($data = mysql_fetch_row($debat)){
if ($data[3]== '0' && $emne == $data[1]){
echo "<br><br>";
echo " -> ";
echo $data[2];
}
}
}
}

----------------------------------

Problemet er at når det er kørt igennem og den har fundet der første indlæg
med tilhørende besvarelser, stopper den, selvom der er mere i databasen..

Kan det være pga. at jeg har en while i en while..

Ps. Jeg er ret ny inden for php

--------------------------------------------
Mvh. Kasper B. Rasmussen
k.birk@email.dk
www.kbirk.dk
ICQ: 57859508



 
 
Jens Tønnesen (11-08-2002)
Kommentar
Fra : Jens Tønnesen


Dato : 11-08-02 16:57

"Kasper B. Rasmussen" <k.birk@email.dk> skrev den Sun, 11 Aug 2002
17:20:05 +0200 i dk.edb.internet.webdesign.serverside.php:

>$debat = mysql_query("select * from debat");
> while ($data = mysql_fetch_row($debat)){
> if ($data[3] == 1){
> echo $data[1];
> echo "<br>";
> echo $data[2];
> $emne = $data[1];
>
> while ($data = mysql_fetch_row($debat)){
> if ($data[3]== '0' && $emne == $data[1]){
> echo "<br><br>";
> echo " -> ";
> echo $data[2];
> }
> }
> }
> }
>
>----------------------------------

>Problemet er at når det er kørt igennem og den har fundet der første indlæg
>med tilhørende besvarelser, stopper den, selvom der er mere i databasen..

>Kan det være pga. at jeg har en while i en while..

Jeg forstår slet ikke begrundelsen for din anden while-løkke, er det
for at hente 'tråde'?

Uden at kende din datastruktur, så vil komme med følgende forslag:

$debat = mysql_query("select * from debat");
while ($data = mysql_fetch_row($debat)){
if ($data[3] == 1){
echo $data[1];
echo "<br>";
echo $data[2];
$emne = $data[1];
} else if ($data[3]== '0' && $emne == $data[1]){
echo "<br><br>";
echo " -> ";
echo $data[2];
}
}

Det vil formodentlig betyde at du skal ændre din query til "select *
from debat order by emne", under forudsætning at emne-feltet hedder
emne i tabellen.

>Ps. Jeg er ret ny inden for php

Det har vi alle været engang... nogle gange føler jeg stadig, jeg er
det

PS. Har du overvejet blot at installere phorum
(http://www.phorum.org).
--
Jens Tønnesen - http://www.pressefoto.dk

Johan Holst Nielsen (11-08-2002)
Kommentar
Fra : Johan Holst Nielsen


Dato : 11-08-02 17:08

> Uden at kende din datastruktur, så vil komme med følgende forslag:


Jep og dertil hører at det for det meste er dumt at selecte med * da man
får alt muligt ubrugeligt med ;) brug heller SELECT id, topic osv...

mvh
Johan


Jens Tønnesen (11-08-2002)
Kommentar
Fra : Jens Tønnesen


Dato : 11-08-02 18:57

Johan Holst Nielsen <johan@weknowthewayout.com> skrev den Sun, 11 Aug
2002 18:07:40 +0200 i dk.edb.internet.webdesign.serverside.php:

>Jep og dertil hører at det for det meste er dumt at selecte med * da man
>får alt muligt ubrugeligt med ;) brug heller SELECT id, topic osv...

Det er så en anden snak... det vil jeg ikke begynde at trætte en
'begynder udi PHP og SQL med'.

--
Jens Tønnesen - http://www.pressefoto.dk

Johan Holst Nielsen (12-08-2002)
Kommentar
Fra : Johan Holst Nielsen


Dato : 12-08-02 08:03

>>Jep og dertil hører at det for det meste er dumt at selecte med * da man
>>får alt muligt ubrugeligt med ;) brug heller SELECT id, topic osv...
>
>
> Det er så en anden snak... det vil jeg ikke begynde at trætte en
> 'begynder udi PHP og SQL med'.

Well, det er altid bedst at lære det rigtige først, eller lærer man det
aldrig rigtigt, hvis man tager "genvejene" hele tiden...

Så det var egentlig ikke for være negativ, men synes faktisk det er en
vigtig pointe da det kan give store perfermance mæssige problemer ved
andre database strukturer. F.eks. hvis man begynder at gennem binære
data (eks. billeder) i db, og stadig bruger * selects!

:) Og velkommen til endnu en uge ;)

mvh
Johan


Jens Tønnesen (12-08-2002)
Kommentar
Fra : Jens Tønnesen


Dato : 12-08-02 08:31

Johan Holst Nielsen <johan@weknowthewayout.com> skrev den Mon, 12 Aug
2002 09:02:47 +0200 i dk.edb.internet.webdesign.serverside.php:

>> det vil jeg ikke begynde at trætte en
>> 'begynder udi PHP og SQL med'.

>Well, det er altid bedst at lære det rigtige først, eller lærer man det
>aldrig rigtigt, hvis man tager "genvejene" hele tiden...

Det er jeg meget uenig med dig i. Rent pædagogisk skal man altså ikke
starte med at læsse alt for mange informationer i hovedet på folk.
Ting skal have tid til at bundfælde sig.

I det konkrete eksempel drejede det sig om problemer med en
while-løkke - den underliggende datastruktur og kaldet hertil var i
princippet sagen uvedkommende. I en testfase, som der her var tale om,
ser jeg heller ingen grund til at undlade at bruge * i SELECTs.

>Så det var egentlig ikke for være negativ, men synes faktisk det er en
>vigtig pointe da det kan give store perfermance mæssige problemer ved
>andre database strukturer. F.eks. hvis man begynder at gennem binære
>data (eks. billeder) i db, og stadig bruger * selects!

Alene det at gemme binære data ala billeder i databasen ville jeg
opfatte som ualmindeligt tåbeligt, i særdeleshed set ud fra en
performance-mæssg synsvinkel.

--
Jens Tønnesen - http://www.pressefoto.dk

Johan Holst Nielsen (12-08-2002)
Kommentar
Fra : Johan Holst Nielsen


Dato : 12-08-02 15:19

>>Well, det er altid bedst at lære det rigtige først, eller lærer man det
>>aldrig rigtigt, hvis man tager "genvejene" hele tiden...
>
> Det er jeg meget uenig med dig i. Rent pædagogisk skal man altså ikke
> starte med at læsse alt for mange informationer i hovedet på folk.
> Ting skal have tid til at bundfælde sig.

Ok, der har vi så to forskellige opdattelser. Det ene kan vel være lige
så rigtigt eller forkert som det andet :)

> I det konkrete eksempel drejede det sig om problemer med en
> while-løkke - den underliggende datastruktur og kaldet hertil var i
> princippet sagen uvedkommende. I en testfase, som der her var tale om,
> ser jeg heller ingen grund til at undlade at bruge * i SELECTs.

Jeg synes nu det er vigtigt at køre uden * ved tests. Hvorfor ikke lave
testen så optimal som muligt? (eventuelt med en masse ekstrakode som men
senere fjerner)... der er ingen grund til at lave "forkert" kode i en
testfase. Testfasen skal derimod bruges til f.eks. at skrive output ud
til browseren med mere...

>>Så det var egentlig ikke for være negativ, men synes faktisk det er en
>>vigtig pointe da det kan give store perfermance mæssige problemer ved
>>andre database strukturer. F.eks. hvis man begynder at gennem binære
>>data (eks. billeder) i db, og stadig bruger * selects!
>
>
> Alene det at gemme binære data ala billeder i databasen ville jeg
> opfatte som ualmindeligt tåbeligt, i særdeleshed set ud fra en
> performance-mæssg synsvinkel.

Hvilket det ikke altid er...

Et par citater:
Hvorfor bruge billeder i databaser!

"Centralisering? Simpel database-replikering uden samtidig at skulle
flytte filer fra filsystemet med (hvilket i princippet bør ske i samme
transaktion)? Rettighedsmæssige årsager, uden at skulle oprette
brugere i operativsystemet?" - Peter Brodersen

Det var blandt andet et af de bedre argumenter i tråden "upload af
billeder til mysql" fra den 6/8...

Og rent performance mæssigt er det ikke rigtig at det er dårligt? I
visse tilfælde koster det dyrere at flytte billeder rundt osv..

F.eks. var jeg ude for følgende:
Vi havde 2 servere, som stod for håndtering af brugerinterfacet. Disse
modtog billeder via opload, og disse billeder skulle bruges i noget
preview. Dog var problemet at serverne kørte med DNS "load-sharing"...
hvilket betød at brugeren reelt godt kunne blive smidt over til en anden
maskine end den brugeren havde oploaded billedet på.
Heldigvis havde vi så en backend maskine til at håndtere databasen, og
billederne blev selvfølgelig smidt i denne database?
Det vil jeg vove at påstå det var hurtigere end f.eks. at køre en åbne
en ftp connection til backend serveren og smide filerne over via
dette... både kodemæssigt samt performance mæssigt...

Så billeder i DB'ere kan bruges i visse tilfælde...

mvh
Johan


Peter Brodersen (13-08-2002)
Kommentar
Fra : Peter Brodersen


Dato : 13-08-02 05:34

On Mon, 12 Aug 2002 16:18:44 +0200, Johan Holst Nielsen
<johan@weknowthewayout.com> wrote:

>> Det er jeg meget uenig med dig i. Rent pædagogisk skal man altså ikke
>> starte med at læsse alt for mange informationer i hovedet på folk.
>> Ting skal have tid til at bundfælde sig.
>Ok, der har vi så to forskellige opdattelser. Det ene kan vel være lige
>så rigtigt eller forkert som det andet :)

Jeg vil nu tilslutte sig Jens' pædagogiske opfattelse. Skifter man
fokus løbende, vil det kunne give en sammenblanding af
problemløsningen ("det var noget med at ændre antallet af
while-løkker, og så vist også noget med at undlade at bruge *...") -
hvor man altså risikerer at få blandet tekniske ændringer sammen med
optimeringsmæssige aspeker.

>Et par citater:
>Hvorfor bruge billeder i databaser!
>
>"Centralisering? Simpel database-replikering uden samtidig at skulle
>flytte filer fra filsystemet med (hvilket i princippet bør ske i samme
>transaktion)? Rettighedsmæssige årsager, uden at skulle oprette
>brugere i operativsystemet?" - Peter Brodersen

Blot for at undgå misforståelser ud fra ovenstående citat, vil jeg da
lige nævne, at jeg normalt ikke er tilhænger af billeder i databaser,
og således ikke overordnet vil argumentere for at smide sine billeder
i databaser. Jeg kan bare blot se nogle situationer, hvor det giver
god mening at gøre det.

--
- Peter Brodersen

Johan Holst Nielsen (13-08-2002)
Kommentar
Fra : Johan Holst Nielsen


Dato : 13-08-02 08:38

>>>Det er jeg meget uenig med dig i. Rent pædagogisk skal man altså ikke
>>>starte med at læsse alt for mange informationer i hovedet på folk.
>>>Ting skal have tid til at bundfælde sig.
>>
>>Ok, der har vi så to forskellige opdattelser. Det ene kan vel være lige
>>så rigtigt eller forkert som det andet :)
>
> Jeg vil nu tilslutte sig Jens' pædagogiske opfattelse. Skifter man
> fokus løbende, vil det kunne give en sammenblanding af
> problemløsningen ("det var noget med at ændre antallet af
> while-løkker, og så vist også noget med at undlade at bruge *...") -
> hvor man altså risikerer at få blandet tekniske ændringer sammen med
> optimeringsmæssige aspeker.

Jeg har funderet en del over det, og kan godt se jeres synspunkter kan
være rigtige. Så trækker mig delvis. Jeg ville dog selv foretrække min
form for indlæring. Men ellers ville jeg nok heller ikke sprede den ;)
Tror det handler lidt om smag og behag, men skal da ikke afvise at jeg
er i mindretal...

>
>>Et par citater:
>>Hvorfor bruge billeder i databaser!
>>
>>"Centralisering? Simpel database-replikering uden samtidig at skulle
>>flytte filer fra filsystemet med (hvilket i princippet bør ske i samme
>>transaktion)? Rettighedsmæssige årsager, uden at skulle oprette
>>brugere i operativsystemet?" - Peter Brodersen
>
>
> Blot for at undgå misforståelser ud fra ovenstående citat, vil jeg da
> lige nævne, at jeg normalt ikke er tilhænger af billeder i databaser,
> og således ikke overordnet vil argumentere for at smide sine billeder
> i databaser. Jeg kan bare blot se nogle situationer, hvor det giver
> god mening at gøre det.

Det jeg prøvede at bruge dit citat til var skam ikke at sige at billeder
skal i databaser for det mest. Langt fra tværtimod. Men i visse
applikationsstrukturer samt gøremål vil det være en fordel at smide
billeder ind i databaser, således det netop ligger i relation med det
data som det skal bruges til.

Derfor vil jeg da sige at for langt de fleste tilfælde er det dumt at
smide almindelig billeder i databaser. Tværtimod skal man smide billeder
i databaser hvor det er nødvendig eller fordelagtigt, og ikke når man
blot ønsker at lege "databasenørd". Det vil gøre mere ond end godt ;)

Med venlig hilsen
Johan


Jens Tønnesen (13-08-2002)
Kommentar
Fra : Jens Tønnesen


Dato : 13-08-02 19:46

Johan Holst Nielsen <johan@weknowthewayout.com> skrev den Tue, 13 Aug
2002 09:37:45 +0200 i dk.edb.internet.webdesign.serverside.php:

>>>>Det er jeg meget uenig med dig i. Rent pædagogisk skal man altså ikke
>>>>starte med at læsse alt for mange informationer i hovedet på folk.
>>>>Ting skal have tid til at bundfælde sig.

(...)

>Jeg har funderet en del over det, og kan godt se jeres synspunkter kan
>være rigtige. Så trækker mig delvis. Jeg ville dog selv foretrække min
>form for indlæring.

Jamen, det ville såmænd egentlig også selv Jeg foretrækker at få
alle forbehold serveret fra starten af, men min erfaring med
undervisning er det kan blive for overvældende. Jeg skal faktisk køre
et kursus i PHP og SQL for udprægede begyndere om en 14 dages tid og
sidder netop og planlægger forløbet.

Min erfaring fra tidligere kurser er, at det simpelthen ikke må blive
for indviklet. Derfor starter jeg med 'SELECT * FROM table'. Når man
så har fanget princippet i en SELECT-query, så kan man begynde at
forfine den, herunder at optimere den til bede performance.

--
Jens Tønnesen - http://www.pressefoto.dk

Jens Tønnesen (12-08-2002)
Kommentar
Fra : Jens Tønnesen


Dato : 12-08-02 15:39

Johan Holst Nielsen <johan@weknowthewayout.com> skrev den Mon, 12 Aug
2002 16:18:44 +0200 i dk.edb.internet.webdesign.serverside.php:

>Jeg synes nu det er vigtigt at køre uden * ved tests. Hvorfor ikke lave
>testen så optimal som muligt?

Det kommer godt nok an på, hvad det er man tester.

[klip]

>> Alene det at gemme binære data ala billeder i databasen ville jeg
>> opfatte som ualmindeligt tåbeligt, i særdeleshed set ud fra en
>> performance-mæssg synsvinkel.

>Hvilket det ikke altid er...

Tja, nu ved jeg ikke, hvad det er for nogle billeder, du skal have
flyttet rundt. Mine billedfiler fylder mellem 1 og 2 MB og det synes
jeg ikke er praktisk at gemme i en database. I hvert fald ikke så
længe jeg ikke skal søge på de binære data.

--
Jens Tønnesen - http://www.pressefoto.dk

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

Månedens bedste
Årets bedste
Sidste års bedste