/ 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
Hvordan får jeg vendt denne chat-listning ~
Fra : Jakob Munck


Dato : 29-05-06 19:09

Jeg har installeret en chat på en website, og alt virker godt, lige bortset
fra at jeg gerne vil have, at de sidst indskrevne chat-tekster vises øverst
i chatten, og ikke nederst, som det er tilfældet her. Men jeg kan ikke finde
ud af, hvad jeg skal gøre, for at vende listningen om, og søger derfor lidt
hjælp:

<?php
//her findes antallet af indskrevning tekster
$getrows="SELECT * FROM ch_messages";
$getrows2=mysql_query($getrows);
$getrows3=mysql_num_rows($getrows2);
$s=$getrows3-30;
if($s<0)
{
$s=0;
}
$id=0;
while(!connection_aborted())
{
$id++;
print "<script type='text/javascript'>";
print "window.location.hash = 'm$id';";
print "</script>";

//Her listes meddelelserne, som ligger i en tabel. Men de skal listes
omvendt.
//Og det nytter ikke bare at udskifte ASC med DESC, for så virker den slet
ikke.
//Det har at gøre med, at den viser records fra $s til $getrows3
$getmessage="SELECT * FROM sechat_messages ORDER BY time ASC limit
$s,$getrows3";

$getmessage2=mysql_query($getmessage) or die("Could not get messages");

while($getmessage3=mysql_fetch_array($getmessage2))
{

........
?>

Jeg har lavet en del forsøg, men uden succes. Det nytter, som nævnt, ikke
bare at skrive DESC i stedet for ASC, for der er noget i "limit" der gør, at
der skal rettes mere end dette.

Hvem kan give et godt råd?


v.h.
Jakob



 
 
Bent Stigsen (30-05-2006)
Kommentar
Fra : Bent Stigsen


Dato : 30-05-06 00:29

Jakob Munck wrote:
> Jeg har installeret en chat på en website, og alt virker godt, lige bortset
> fra at jeg gerne vil have, at de sidst indskrevne chat-tekster vises øverst
> i chatten, og ikke nederst, som det er tilfældet her. Men jeg kan ikke finde
> ud af, hvad jeg skal gøre, for at vende listningen om, og søger derfor lidt
> hjælp:
>
> <?php
> //her findes antallet af indskrevning tekster
> $getrows="SELECT * FROM ch_messages";
> $getrows2=mysql_query($getrows);
> $getrows3=mysql_num_rows($getrows2);

Hvis du ikke skal bruge rækkerne til noget, så brug hellere
"select count(*) from ...".

> $s=$getrows3-30;
[snip]
> //Her listes meddelelserne, som ligger i en tabel. Men de skal listes
> omvendt.
> //Og det nytter ikke bare at udskifte ASC med DESC, for så virker den slet
> ikke.
> //Det har at gøre med, at den viser records fra $s til $getrows3
> $getmessage="SELECT * FROM sechat_messages ORDER BY time ASC limit
> $s,$getrows3";

Der er noget galt...
offset = $s = nummer tredive fra bunden i tabel ch_messages
limit = $getrows3 = antal rækker i tabel ch_messages

Med tal fra den rigtige tabel havde offset været god nok, men limit
(med $getrows3) ville være overflødig, da den altid bare vil give alle
resterende rækker.

[snip]
> Jeg har lavet en del forsøg, men uden succes. Det nytter, som nævnt, ikke
> bare at skrive DESC i stedet for ASC, for der er noget i "limit" der gør, at
> der skal rettes mere end dette.

De tredive sidste rækker bliver de tredive første rækker, når du
vender rundt på sorteringen. D.v.s. du vil nok bare ha' "limit 30".


/Bent

Bent Stigsen (30-05-2006)
Kommentar
Fra : Bent Stigsen


Dato : 30-05-06 06:58

Bent Stigsen wrote:
[snip]
>> //Det har at gøre med, at den viser records fra $s til $getrows3
>> $getmessage="SELECT * FROM sechat_messages ORDER BY time ASC limit
>> $s,$getrows3";
>
> Der er noget galt...
> offset = $s = nummer tredive fra bunden i tabel ch_messages
> limit = $getrows3 = antal rækker i tabel ch_messages
>
> Med tal fra den rigtige tabel havde offset været god nok, men limit (med
> $getrows3) ville være overflødig, da den altid bare vil give alle
> resterende rækker.

Ahem, var vist lidt noget halvsludder. Offset kan ikke stå alene, så
limit (eller rowcount efter manualen) er påkrævet, men skal i dit
tilfælde aldrig have anden værdi en tredive.


/Bent

Jakob Munck (30-05-2006)
Kommentar
Fra : Jakob Munck


Dato : 30-05-06 11:31

Mange tak for dine kommentarer. I erkendelse af at denne kode er rodet og
fejlfyldt har jeg erstattet den med noget mere enkelt, nemlig:

$query = mysql_query ("SELECT * FROM sechat_messages ORDER BY time DESC
LIMIT 50") or die(mysql_error());


Og det virker.

v.h.
Jakob



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

Månedens bedste
Årets bedste
Sidste års bedste