|
| 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
| |
|
|