DESC/ASC krånglar i PHP

Tråden skapades och har fått 5 svar. Det senaste inlägget skrevs .
1

Jag inleder med att glatt erkänna att jag är tämligen rudis på PHP, men har ändå skaffat mig lite grundkunskaper.

Mitt problem:

Jag har följande kod på en sida:

<?php
// ----------
// IBF Latest Topics 1.3 - © Chris Mellor - Edited By Paul 'Insane' Fraser
// ----------

function IBFLatestTopic($num){

// ----------
// Database & Website Details
// ----------
$host = "RADERAT"; 
$user = "RADERAT"; 
$pass = "RADERAT"; 
$db_name = "RADERAT"; 

$web_addr = "http://www.fendern.se"; // Website URL
$forum_dir = "segla/index.php"; // Forum directory

// ----------
// Connect to database
// ----------

$connect = mysql_connect($host, $user, $pass) or die("Could Not Connect To <b>\"$host\"</b>");

$select = mysql_select_db($db_name, $connect) or die("Could Not Select Database: <b>\"$db_name\"</b>");

$sql = "SELECT * FROM `{$INFO['sql_tbl_prefix']}topics` ORDER BY `last_post` ASC LIMIT 0, {$num}";

$query = mysql_query("SELECT * FROM `ibf_topics`")
	or die("Could Not Execute The Query");
					
// ----------
// Running A Loop
// ----------
	
echo("<ol>");
		
while( $ibf = mysql_fetch_array($query)) {
	echo("<a href=\"$web_addr/$forum_dir?showtopic=$ibf[tid]&view=getnewpost\">$ibf[title]</a><br>
	$ibf[posts] svar<br>");
}

echo("</ol>");

// ----------
// End Of Script 
// ----------

}
?>

Koden genererar den här sidan
, en sammanställning av de inlägg som postats på mitt forum således. Men det först skrivna inlägget står högst upp på sidan, medan det senaste inlägget står längst ned på sidan. Även om jag ändrar ... ORDER BY `last_post` ASC... till ... ORDER BY `last_post` DESC... kvarstår ordningen.

Vad gör jag för fel..?

  • Medlem
  • Kiruna
  • 2006-05-08 23:15

Först sparas SQL-satsen i en variabel:

$sql = "SELECT * FROM `{$INFO['sql_tbl_prefix']}topics` ORDER BY `last_post` ASC LIMIT 0, {$num}";

Sedan när frågan ska köras används inte variabeln, utan en annan (förenklad) SQL-sats:

$query = mysql_query("SELECT * FROM `ibf_topics`") or die("Could Not Execute The Query");

Antingen ändrar du i denna direkt, eller ändra helt enkelt till:

$query = mysql_query($sql) or die("Could Not Execute The Query");

Tack för snabbt svar, men;

1. Jag får "Could Not Execute The Query" om jag gör som du beskriver
2. Jag har inga problem att få fram alla inlägg, det är ordningen på dom jag vill ändra - ska ditt förslag ändra ordningen på något sätt? (Jag får intrycket av att ditt förslag inte har med i vilken ordning datan presenteras)

  • Medlem
  • Mölndal
  • 2006-05-09 10:54

2. Problemet med din kod var att posterna inte sorterades alls, eftersom variabeln som innehåller ASC resp. DESC inte används av programmet. Det är detta som spots förslag löser.

Om du får felmeddelande så prova att kapa ner SQL-satsen bit för bit tills du hittar vad som ger felet.

Jag har kört fast. I forumprogramvaran kan man köra en "manual query" som ser ut så här:

SELECT * FROM ibf_topics ORDER BY `tid` DESC

och därigenom få rätt sortering på inläggen. Det funkar bra.

Jag har laborerat mig blodig i första inläggets kod, med både de svar jag fått ovan och med koden som fungerar i "manual query" - men jag får det inte att sortera på något annat sätt.

Möjligen står svaret att finna i ovanstående svar, men jag förstår inte hur. Jag tycker jag har testat alla möjliga varianter. Idéer, någon?

Häpp, nu funkade det. Jag flyttade ned "ORDER BY..." till raden nedanför. Det var för enkelt. Tack för all hjälp.

1
Bevaka tråden