Avatar billede Gudiik Nybegynder
15. oktober 2009 - 02:59 Der er 4 kommentarer og
1 løsning

Vend en while på hovedet.

Hej allesammen, har et lille problem med min chat. Det hele fungere som det skal bortset fra når jeg skriver en besked, og den bliver gemt i databasen lister den besked øverst. Altså den tager de nyeste beskeder og sætter øverst. Og vil gerne have at de nyeste kommer nederst, Men kan ikke få dem til det. Har arbejdet på det i 3-4 timer nu, og det fungere bare ikke :(. Så håber i kan give en hjælpende hånd.

Mit script ser sådan her ud:

$logged = $row3[Logged];
$result = mysql_query("SELECT * FROM Chat WHERE Time>$logged ORDER BY ID DESC");

$i = 0;
while ($row2 = mysql_fetch_array($result)) {
if ($i == 0) {
$linjetal = $row2[Linjer];
}
if ($linjetal <= 19) {
echo "<b>"."$row2[Af]"."</b> "."$row2[Besked]";
echo "<br>";
}
$linjer = $row2[Linjer];
$linjetal = ($linjetal + $linjer);
$i++;
}

Det den skal gøre er at liste det "baglæns" sådan at de nyeste kommer først.

Og kan ikke bare bruge ORDER BY ID ASC. Da så får jeg et udkast af de først, hvilket jeg ikke skal da, den skal tage de sidste 20 beskeder.
Avatar billede nissen2630 Novice
15. oktober 2009 - 08:03 #1
Dette skulle gøre det
$result = mysql_query("SELECT * FROM Chat WHERE Time>$logged ORDER BY ID DESC LIMIT 0,20");
Avatar billede intenz Novice
15. oktober 2009 - 10:34 #2
Brug den SQL statement missen2630 har skrevet for kun at få de sidste 20.

Og så kan du bare gemme dit output i en variabel og udskrive det efter løkken (har også lige skrevet den lidt om, så den ikke er så stor. Det giver samme resultat med den nye SQL (dog ikke testet)):

----

$output = "";
$linjetal = 0;
while ($row2 = mysql_fetch_array($result)) {
  $output = "<b>$row2[Af]</b> $row2[Besked]<br>" . $output;
  $linjetal += $row2[Linjer];
}
print $output;
Avatar billede Gudiik Nybegynder
15. oktober 2009 - 14:09 #3
nissen det kan jeg jo netop ikke.
Da jeg ikke bare skal bruge de sidste 20 post, men kun de sidste 20 linjer.

Og en post kan godt have 2 liner f.eks. Så det kan jeg ikke bruge desværre.
Avatar billede Gudiik Nybegynder
15. oktober 2009 - 14:37 #4
Jeg fik det selv ordnet. Med en ret så tung kode :(.

Men.

$result = mysql_query("SELECT * FROM Chat WHERE Time>$logged ORDER BY ID DESC");

$i = 0;
while ($row = mysql_fetch_array($result)) {
if ($i == 0) {
$linjetal = $row[Linjer];
$ID = $row[ID];
}
if ($linjetal <= 20) {
$output = ($ID - $i);
$i++;
}
$linjer = $row[Linjer];
$linjetal = ($linjetal + $linjer);
}
$b = 0;
while ($b < $i) {
$result2 = mysql_query("SELECT * FROM Chat WHERE ID=$output ORDER BY ID DESC");
$row2 = mysql_fetch_array($result2);
echo "<b> "."$row2[Af]"."</b>: $row2[Besked]";
echo "<br>";
$output++;
$b++;
}
Avatar billede intenz Novice
15. oktober 2009 - 18:49 #5
Du havde fået samme resultat med en pænere kode hvis du havde brugt mit svar og nissen2630's SQL:
----
$logged = $row3[Logged];
$result = mysql_query("SELECT * FROM Chat WHERE Time>$logged ORDER BY ID DESC LIMIT 0,20");

$output = "";
$linjetal = 0;
while ($row2 = mysql_fetch_array($result)) {
  $output = "<b>$row2[Af]</b> $row2[Besked]<br>" . $output;
  $linjetal += $row2[Linjer];
}
print $output;
----

Som du gør det nu henter du jo alle rækker ud fra din chat selvom du kun skal bruge de sidste 20. Det er fint nok så længe der ikke mere så mange rækker i databasen, men når der er x antal 1000 så kommer det til at dræbe din database. Du skal kun hente det ud du skal bruge, brug der for LIMIT 0,20.
(det betyder start fra række 0 og hent de første 20).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester