PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sortieren nach Spaltenüberschrift


kuechenschabe
28.08.2003, 12:16:29
Hallo,
ich habe mir ein kleines Abfragescript für eine Datenbank geschrieben, komme aber mit der Sortierung nicht weiter - die Finger sind schon fast wundgegoogelt :-).

Die manuelle Sortierung soll durch eine frei wählbare Sortierung mit Klick auf die Spaltenüberschrift (wie bei phpMyAdmin) ersetzt werden. Leider habe ich bis jetzt nur einen Lösungsansatz, der zudem nicht funktioniert. Könnte mir da bitte jemand freundlicherweise helfen, das Problem zu lösen?


Mein Script (Ausschnitt):

$db = mysql_connect("$hostname","$user","$password");

mysql_select_db("$database",$db);
$result = mysql_query("SELECT * FROM $table",$db);
$num = mysql_numrows($result);


// Meine Abfrage - $sort ist z.Z. manuell als $sort=Nr desc eingestellt

$var = mysql_query("SELECT Nr, Bezeichnung, abc, ... FROM $table where $Abfrage order by $sort",$db);

$anzahl = @mysql_num_rows($var);

if ($anzahl == "0") {
echo "<p>Keine Eintr&auml;ge gefunden !</p>";
}
else{
echo "<table border="1" cellpadding=10>n";


echo "<tr><th><a href=#?$sort1>Nr.</a></th><th><a href=#?$sort2>Bezeichnung</a></th><th>abc</th><th>.</th><th>...</th></tr>";

$var= sort1;
switch ($var) {
case 0:
$var = mysql_query("SELECT Nr, Bezeichnung, abc, ... FROM $table where $Abfrage order by Nr asc",$db);
break;
case 1:
$var = mysql_query("SELECT Nr, Bezeichnung, abc, ... FROM $table where $Abfrage order by Nr desc",$db);
break;
}

// $var= sort2;
// switch ($var) {
// case 0:
// $var = ...


while ($myrow = mysql_fetch_row($var)) {
...
}



printf(" <tr>
<td>%s</td>
<td>%s</td>
<td>%s</td>
<td align=center>%s</td>
<td align=right>%s</td>
<td align=right>%s</td>
</tr>",
$myrow[0], $myrow[1], $myrow[3], $myrow[4], ...);
}
}
echo "</table>";
?>

Ted
10.02.2004, 18:45:16
Ich hab das jetzt nur schnell ueberflogen, aber kannst du uns nicht mal die fehler meldung schicken, wenns denn eine gibt? Und du bracuhst keine "" um die null bei der if abfrage, daran sollte es zwar nicht ligen aber ich wuerdes mal versuchen (string vs nummer)

trigan22
12.02.2004, 13:58:58
versuche es einfach mal mit folgendem:

<?php
function holedaten ( $feldname ) // funktioniert auch für Arrays !!!
{ global $HTTP_POST_VARS,$HTTP_GET_VARS;

if ( isset($HTTP_POST_VARS[$feldname]) )
$wert = $HTTP_POST_VARS[$feldname];
elseif ( isset($HTTP_GET_VARS[$feldname]) )
$wert = $HTTP_GET_VARS[$feldname];
else
$wert = "";
if ( is_array($wert) )
{ // jetzt jeden Wert im Array einzeln trimmen
for ( $i = 0; $i < count($wert); $i++ )
{ if ( get_magic_quotes_gpc() ) $wert[$i] = stripslashes($wert[$i]);
$wert[$i] = trim($wert[$i]);
}
// das Array ausgeben
return $wert;
}
else // den getrimmten Wert zurückgeben
{ // falls magic_quotes eingeschaltet schmeiss sie wieder raus
if ( get_magic_quotes_gpc() ) $wert = stripslashes($wert);
return trim($wert);
}
}

function richtung( $sort )
{ global $sortierung,$richtung;
echo ( $sortierung == $sort && $richtung == "ASC" ) ? "DESC" : "ASC";
}
$sortierung = holedaten("sortierung");
$richtung = holedaten("richtung");

if ( ! in_array($sortierung,array("Tabellenüberschrift 1","Tabellenüberschrift 2")) )
$sortierung = "Tabellenüberschrift 1";
if ( ! in_array($richtung,array("ASC","DESC")) )
$richtung = "ASC";

?>

...

<th>Tabellenübescrift 1<a href="<?php echo $PHP_SELF; ?>?sortierung=Tabellenüberschrift 1&richtung=<?php richtung("Tabellenüberschrift 1"); ?>" title="Alphabetische Sortierung">Tabellenüberschrift 1</a></th>

...

mysql_query("SELECT Tabellenüberschrift 1,Tabellenüberschrift 2 FROM tabelle ORDER BY $sortierung $richtung LIMIT $start,$ende",$verbindung);

..den Rest kennst du sicher...

Gruss,
BK

DangerLes
04.03.2004, 14:51:50
Ich habe mir diesen Thread nun 5mal durchgelesen und scheine echt zu blöd dafür zu sein, denn ich verstehe so gut wie gar nichts davon. Ich möchte nun auch eine SQL Abfrage per Link in der Überschrift sortieren können, jeweils auf- und absteigend.
So sieht der zuständige Code der PHP-Seite mit der Abfrage und Formatierung aus:

$result = mysql_query ( "SELECT * FROM auctions WHERE user='".addslashes($user_id)."' AND closed='0' ORDER BY ends ASC" );

if ($result)
{
$tplv = "";
$bgColor = "#D9DcE0";

while ($row=mysql_fetch_array($result))
{

$bid = $row['current_bid'];
$starting_price = $row['minimum_bid'];
/* prepare some data */
$date = $row["starts"];
$y = substr ($date, 0, 4);
$m = substr ($date, 4, 2);
$d = substr ($date, 6, 2);
$h = substr ($date, 8, 2);
$min = substr ($date, 10, 2);
$sec = substr ($date, 12, 2);

$ends_date = strval($row["ends"]);
$ends_y = substr ($ends_date, 0, 4);
$ends_m = substr ($ends_date, 4, 2);
$ends_d = substr ($ends_date, 6, 2);
$ends_h = substr ($ends_date, 8, 2);
$ends_min = substr ($ends_date, 10, 2);
$ends_sec = substr ($ends_date, 12, 2);

if($bgColor == "#D9DcE0"){
$bgColor = "#FFFFFF";
}else{
$bgColor = "#D9DcE0";
}

$tplv .= "<TR ALIGN=CENTER VALIGN=MIDDLE BGCOLOR="$bgColor">";

/* image icon */
$tplv .= "<TD>";
if ( strlen($row[pict_url])>0 ) {
$tplv .= "<IMG SRC="images/picture.gif" BORDER=0>";
}
else{
$tplv .= "&nbsp;";
}
$tplv .= "</TD>";

/* this subastas title and link to details */
$difference = time()-mktime($h,$min,$sec,$m,$d,$y);

/* number of bids for this subastas */
$tmp_res = mysql_query ( "SELECT * FROM bids WHERE auction='".$row[id]."' ORDER BY bid DESC" );
if ( $tmp_res )
{
$num_bids = mysql_num_rows($tmp_res);
if ($num_bids>0)
$mybid = mysql_result($tmp_res,0,"bid");
else
$mybid = 0;
}
else
{
$num_bids = 0;
}

if ($num_bids > 0)
$bid_color = "#336699";
else
$bid_color = "#000000";


$tplv .= "<TD ALIGN=LEFT><A HREF="item.php?id=".$row[id]."">
<FONT FACE="Tahoma, Arial, Times New Roman, Verdana" SIZE=2 COLOR =".$bid_color.">".htmlspecialchars($row[title])."
</FONT></A>";

if ($num_bids > 0)
$tplv .= "<br><A HREF="change_item.php?id=".$row[id].""><img src="./images/editau.gif" border="0"></A></TD>";
else
$tplv .= "<br><A HREF="edit_active_auction.php?user_id=$user_id&id=".$row[id].""><img src="./images/editau.gif" border="0"></A>&nbsp;<a href = "delete_active_auctions.php?user_id=$user_id&id=".$row[id].""><img src="./images/delete.gif" border="0"></a></TD>";

/* current bid of this subastas */
if($mybid == 0)
$bid = $starting_price;
else
$bid = print_money($mybid);

$tplv .=
"<TD>".
"<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH="100%">".
"<TR VALIGN=TOP><TD ALIGN=LEFT>".
"</TD><TD class=text_normal ALIGN=middle>".
$bid.
"</TD></TR></TABLE>".
"</TD>";


$rpr = (int)$row[reserved_price];
if ($rpr!=0)
$reserved_price = " <IMG SRC="images/r.gif"> ";
else
$reserved_price = "";
$tplv .= "<TD class=text_normal>".$reserved_price.$num_bids."</TD>";

/* time left till the end of this subastas */
$difference = mktime($ends_h,$ends_min,$ends_sec,$ends_m,$ends_d,$ends_y)-time();
$days_difference = intval($difference / 86400);

$difference = $difference - ($days_difference * 86400);
$hours_difference = intval($difference / 3600);
if(strlen($hours_difference) == 1){
$hours_difference = "0".$hours_difference;
}

$difference = $difference - ($hours_difference * 3600);
$minutes_difference = intval($difference / 60);
if(strlen($minutes_difference) == 1){
$minutes_difference = "0".$minutes_difference;
}

$difference = $difference - ($minutes_difference * 60);
$seconds_difference = $difference;
if(strlen($seconds_difference) == 1){
$seconds_difference = "0".$seconds_difference;
}

$tplv .= "<TD class=text_normal>$days_difference $text_126 <BR>$hours_difference:$minutes_difference:$seconds_difference</TD>";

$tplv .= "</TR>";
++$auctions_count;
}
$TPL_auctions_list_value = $tplv;
}
else
$auctions_count = 0;

if ($auctions_count==0)
{
$TPL_auctions_list_value = " <TR ALIGN=CENTER><TD COLSPAN=5>$text_910</TD></TR>";
}


und hier das passende Template:

<TABLE WIDTH="95%" BORDER=0 align="center" cellpadding=3 CELLSPACING=0 class="table_norm">
<TR>
<TD WIDTH="10%" class="text_title_bg" > <? print $text_167; ?> </TD>
<TD WIDTH="45%" class="text_title_bg" > <? print $text_168; ?> </TD>
<TD WIDTH="15%" class="text_title_bg" > <? print $text_169; ?> </TD>
<TD WIDTH="15%" class="text_title_bg" > <? print $text_170; ?> </TD>
<TD WIDTH="15%" class="text_title_bg" > <? print $text_171; ?> </TD>
</TR>
<span class="text_normal"><? print $TPL_auctions_list_value; ?></span>
</TABLE>


Die Text-Variablen sind in einer messages.inc.php folgendermaßen definiert:
$text_167 steht für image
$text_168 steht für Auktionbezeichnung
$text_169 steht für Aktuelles Gebot
$text_170 steht für Anzahl der Gebote
$text_171 steht für Restzeit

Nun möchte ich den Usern die Möglichkeit geben, ihre Artikel jeweils nach den Argumenten $text_168 bis $text_171 ASC und DESC sortieren zu können. Leider werde ich aus dem Code-Wirrwarr ber bisherigen Posts kein bisschen schlauer.

Wäre echt toll, wenn mir jemand dabei behilflich sein könnte.