kostenloser Webspace werbefrei: lima-city


Sortierfunktion

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    Hallo Leute

    Ich setze meine Homepage gerade neu auf. Nicht, dass die alte scheiße wäre oder sowas, aber es fehlen immernoch sehr viele "Standards" und die möchte ich gerne in die neue Homepage mit einbauen.

    Also, Mein Forum hat noch keine Sortierfunktion, die alles nach beispielsweise der Anzahl der Beiträge sortiert vorwärts sowie rückwärts.
    erreichen kann man das, indem man den "Querrysatz" Dynamisch in einer Variable speichert, und ihn dann ausführt, das ist denke ich mal die einfachste Methode.
    nur habe ich jetzt ein kleenes Problem... ich habe Themenüberschriften und Beiträge in unterschiedlichen Tabellen gespeichert, und da schon einiges Vorhanden ist, möchte ich das nicht alles löschen, nur weil ich die Datenbankstrucktur geändert habe... aber wie sortiere ich jetzt die Themen nach der anzahl der Beiträge?gezählt wird beispielsweise so:

    $counterantwortenabfrage = "SELECT COUNT(id) FROM rsforumantworten WHERE thementitel LIKE '$id'";
    $counterantwortenergebnis = mysql_query($counterantwortenabfrage);
    $menge = mysql_fetch_row($counterantwortenergebnis);
    $menge = $menge[0] - 1;


    und die Themenabfrage sieht so aus:

    $themenabfrage = "SELECT * FROM rsforumthemen WHERE kategorie = '$kategorie' AND fixiert = 'fixiert' ORDER BY id DESC";
    $themenergebnis = mysql_query($themenabfrage);
    while($row = mysql_fetch_object($themenergebnis))
       {
       blah blah blah
       }


    kann ich die Themenabfrage dann so machen, dass ich hinten ORDER BY '$menge' mache, oder wie??? also es muss auf jeden Fall nach der Anzahl sortiert werden.
    Wäre sehr nett, wenn ihr mir bei dieser Funktion was zur Seite stehen würdet.

    Gruß
    Technofan
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. e********l

    Erstmal zur Struktur. Damit man beim Sortieren nicht zu große Abfragen produziert empfiehlt es sich die Antworten/Views/ersten/letzen Beitrag mit im Thread zu speichern. Das spart eine Abfrage und macht das Forum performanter. Ist nur ein wenig mehr Arbeit beim pflegen des ganzen.

    Würd dir bei der Abfrage gern helfen, aber ohne die genaue Struktur der beiden Tabellen zu können ist die Abfrage nur schwer zu schreiben ;)
  4. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    joa, kein Problem, die Tabellen sehen so aus:
    Beiträge: http://technofan.lima-city.de/forumantworten.JPG
    Themen: http://technofan.lima-city.de/forumthemen.JPG

    Bis auf id und text (longtext) ist in beiden Tabellen alles auf varchar, was ich aber bei den ansichten bald auf int ändern werde, da sonst nicht richtig gelistet wird... hab ich bei meinen Charts gemerkt, sobald ne Zahl bei 10 ist, kommts alles durcheinander.

    also, wie man das einmal sortiert, also entweder vorwärts oder rückwärts kann ich mir schon denken, aber wie mans dann anstellt, dass der das beim nächsten mal rückwärts sortiert wird schwierig... vllt sollte man da 2 Buttons machen, der eine sortiert rückwärts und der andere vorwärts, das würde vllt auch beim Konfort punkten... bei lima, muss man ja immer 2 mal klicken XD

    Bei mir siend die Themen nämlich order by id Desc gelistet und die ID wird ja net angezeigt... vllt noch nen Button machen, der des alles auf standard setzt... na ja, mal gucken, wie des funzt ^^

    //EDIT

    PS: bei den Beiträgen entspricht der thementitel der id des entsprechenden Themas. alsp ungefair so

    Themen:

    id | thementitel
    1 | lalala
    2 | laaaleeeluuu

    Beiträge:

    id | thementitel
    1 | 1
    2 | 1
    3 | 2

    demnach hätte lalala 2 Beiträge (-1 weil beim erstellen eines Themas ein Beitrag erstellt wird also 1 antwort) und laaaleeeluuu einen Beitrag (auch wieder -1 also keine antwort) so bekomme ich dann eine eindeutige zuweisung hin... damals entsprach der thementitel dem thementitel und da kam mein Forum dann durcheinander, sobald es ein weiteres Thema mit selben Titel gab.

    Beitrag geändert: 9.7.2007 23:52:56 von technofan
  5. e********l

    Ah...welch grausame Struktur.

    Hier erstmal die SQL Anweisung:
    $queryString = "SELECT	t.id AS tid, t.auto, t.thementitel, t.kategorie,
    						COUNT(a.id) AS antworten
    				FROM	rsforumthemen AS t
    					INNER JOIN	rsforumantworten AS a
    						ON	t.id = a.thementitel
    				ORDER BY	antworten ".$ORDER;

    Du musst lediglich bei einem Sortierlink abfragen wie die letzte Sortierrichtung war. Normale URL Parameter werden pet GET übertragen, einfach abfragen und DESC durch ASC ersetzen und umgekehrt.

    Desweiteren solltest du deine Tabelle normalisieren! Für Autor und Kategorie eine eigene Tabelle anlegen und dann die ID in die entsprechenden Felder von Themen und Antworten eintragen.

    Für fixiert/geschlossen reicht eine Spalte mit verschiedenen Werten. Mittel Bit-Operationen könntest du so mehrere Zustände gleichzeitig abbilden.

    Spaltennamen würd ich noch ins englische übersetzen und die tabellennamen könnten auch kürzer sein ;)
  6. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    mittels wat kann ich mehrere Zustände machen?
    das musste mir jetzt erstmal erklären ^^
  7. e********l

    Na wenn du zb. auf themen.php?sort=desc klickst, dann hast du die GET Variable sort. Bei dieser fragst du den Wert ab und wenn der desc ist, dann wird der link mit sort=asc
    aufgebaut.

    $sort = !isset($_GET['sort']) && $_GET['sort'] == 'desc' ? 'asc' : 'desc';
    
    echo '<a href="index.php?sort='.$sort.'">Sortieren nach Antworten</a>'.PHP_EOL;


    Ganz easy ^^

    Beitrag geändert: 10.7.2007 13:42:29 von evil-devil
  8. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    aaaaalso

    ich bin mit meiner HP mitlerweile so weit, dass man hier auch wieder reinschreiben kann...

    undzwar... die Sortierfunktion an sich funktiononiert schon, nur hab ich da ein kleines Prob mit der Session, in der das Sortierargument gespeichert ist...
    da ich diese Sortierfunktion auf mehreren Kategorien verwende, muss die Session ge&#228;ndert werden, da sonst die MySQL-Abfrage ein invalides Ergebnis bekommt und somit eine Fhlermeldung erscheint... und genau das bekomme ich net hin, am besten ihr schaut euch das mal selbst an... die Session wird noch mit einer Getvariable gesetzt, und dann &#252;bernimmt die Session komplett, ich m&#246;chte das Sortierargument n&#228;mlich nicht &#252;berall mitschicken, weils etwas unsch&#246;n aussieht...

    Hier mal mein Problemkind:

    if($_SESSION['content'] == "board")
    {
    $_SESSION['content'] = "board";
    $_SESSION['order'] = "id DESC";
    $order = $_SESSION['order'];
    
    if($_SESSION['order'] == "" AND $_GET['order'] == "")
    {
    $_SESSION['content'] = "board";
    $_SESSION['order'] = "id DESC";
    $order = $_SESSION['order'];
    }
    elseif($_SESSION['order'] != "" AND $_GET['order'] == "")
    {
    $_SESSION['content'] = "board";
    $order = $_SESSION['order'];
    }
    else
    {
    $_SESSION['content'] = "board";
    $_SESSION['order'] = $_GET['order'];
    $order = $_SESSION['order'];
    }
    }
    elseif($_SESSION['order'] != "id DESC")
    {
    $_SESSION['order'] = "id DESC";
    $order = $_SESSION['order'];
    }
    else
    {
    $_SESSION['content'] = "board";
    $_SESSION['order'] = "id DESC";
    $order = $_SESSION['order'];
    }
    
    $abfrage = "SELECT * FROM rsforumthemen WHERE kategorie = '".$_GET['secct']."' ORDER BY fixiert DESC, ".$order." LIMIT $start, $eintraege_pro_seite";
    $ergebnis = mysql_query($abfrage);
    while($row = mysql_fetch_object($ergebnis))
      {
      }


    Wie ihr seht is das alles was cappes, ich hoffe, ihr k&#246;nnt mir da helfen... die einzelnen Kategorien habe ich durch die Session content getrennt, die meines erachtens viel zu fr&#252;h gesetzt wird...
  9. e********l

    Moin, wenn mich meine Montagsm&#252;digkeit nicht zu sehr ausgenockt hat, dann sollte das folgende Konstrukt die gek&#252;rzte Variante von deinem geposteten KOnstrukt darstellen. Hoffe man kann es nachvollziehen, bin noch zu M&#252;de f&#252;r n&#228;here Erkl&#228;rungen.

    $_SESSION['content'] = "board";
    $_SESSION['order'] = "id DESC";
    
    if ($_SESSION['content'] == "board" && isset($_GET['order'])) {	
    	$_SESSION['order'] = $_GET['order']; 	
    }
    
    $order = $_SESSION['order'];
    
    $abfrage = "SELECT	*
    			FROM	rsforumthemen
    			WHERE	kategorie = '".$_GET['secct']."'
    			ORDER BY fixiert DESC, ".$order."
    			LIMIT $start, $eintraege_pro_seite";
    
    $ergebnis = mysql_query($abfrage);
    while($row = mysql_fetch_object($ergebnis)) {
    }


    OT: mit der Kurzschreibweise von IF k&#246;nnte man es noch k&#252;rzer machen ;)


    Beitrag geändert: 22.10.2007 9:45:16 von evil-devil
  10. Autor dieses Themas

    technofan

    Moderator Kostenloser Webspace von technofan

    technofan hat kostenlosen Webspace.

    nein, tut mir leid, das funktioniert leider auch nicht...
    er sortiert zwar, aber sobald ich auf Seite 2,3,4,5 u.s.w. auf der Kategorie anw&#228;hle (Bl&#228;tterfunktion) dann geht die ordnung wieder verloren...
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!