+ Antworten
Ergebnis 1 bis 13 von 13

Thema: [php/sql] Sortierung eine Abfrage - DB-Abfrage aus Session Array

  1. #1
    TP-Supporter Stefan_G hilft, wo's geht Stefan_G hilft, wo's geht Stefan_G hilft, wo's geht Avatar von Stefan_G
    Registriert seit
    May 2005
    Ort
    Tecklenburg
    Beiträge
    484

    [php/sql] Sortierung eine Abfrage - DB-Abfrage aus Session Array

    Hallo,

    für die Sortiermöglichkeit einer DB-Abfrage bräuchte ich mal einen Denkanstoß.
    Eine Suchabfrage packe ich folgendermaßen in ein Array:

    PHP-Code:
    $query="select blabla from blabla where $suche like '".$such_topic."%' ORDER BY user_nick DESC";
    }
    $result=mysql_query($query);

    if(isset(
    $_SESSION["userArray"])) unset($_SESSION["userArray"]);
    if(isset(
    $_SESSION["userArray"])) session_unregister(userArray);
    print_r($_SESSION["userArray"]);

    $i=0;
       while (
    $row mysql_fetch_array($result)) {
        
    $Article[$i]["userID"]=$row[0];
        
    $Article[$i]["user_nick"]=$row[1];
        
    $Article[$i]["user_vorname"]=$row[2];
        
    $Article[$i]["user_nachname"]=$row[3];
        
    $Article[$i]["user_plz"]=$row[4];
        
    $Article[$i]["user_ort"]=$row[5];
        
    $Article[$i]["user_edit"]=$row[6];
        
    $i++;
        
        
    $_SESSION["userArray"][] = $row[0];
        
        } 
    Funktioniert alles soweit.
    In der Ausgabeseite möchte ich jetzt die Möglichkeit haben, die Suchausgabe sortieren zu lassen - also dieselben Daten - nur in anderer Reihenfolge. Die userID´s stehen ja im sessionarray, aber ich stehe etwas auf dem Schlauch, wie die DBAbfrage/Schleife aus einem SessionArray jetzt aussehen muss.

    Gruß

    Stefan

  2. #2
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    Hi,

    um die Ausgabe sortierbar zu machen, hast Du eigentlich nur 2 Möglichkeuten:

    1. Suchabfrage in einer temporären Tabelle speichern
    2. Array nach vorgegeben Kriterien sortieren.

    Ohne jetzt zu wissen, welche Infos in der DB sind und welche Infos Du anzeigst, ist es schwer zu beurteilen, was mehr Sinn macht.


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  3. #3
    TP-Specialist theo bringt sich richtig ein Avatar von theo
    Registriert seit
    Apr 2002
    Ort
    743, evergreen terrace
    Beiträge
    2.346
    vielleicht hilft dir das hier ansonsten sollte dir google mit "mehrdimensionale arrays sortieren" weiterhelfen koennen
    /b{2}|[^(bb)]/

    [Workshop] Nested sets

  4. #4
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    für komplexe Arraysortierung hatte ich schon mal was reingestellt:
    http://www.traum-projekt.com/forum/s...ad.php?t=66957

    Seltsamerweise gabs keine Reaktionen, war die Routine zu komplex ?


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  5. #5
    TP-Supporter Stefan_G hilft, wo's geht Stefan_G hilft, wo's geht Stefan_G hilft, wo's geht Avatar von Stefan_G
    Registriert seit
    May 2005
    Ort
    Tecklenburg
    Beiträge
    484
    Hi,

    danke! Werde mich mal durchwühlen.
    Meine Grundidee ist, dass ich dieselbe Seite (also die Ergebnisseite der Suche) erneut aufrufe und zwar mit dem Parameter der gewünschten Sortierung:

    Die Sortierlinks auf der Ausgabeseite sehen so aus:

    HTML-Code:
    ...ergebnisseite.php?sort=spaltenname
    Die DB-Abfrage bräuchte dann "nur" noch ein

    PHP-Code:
    "...dbabfrage... SORT by $sort;" 
    Zitat Zitat von St@eff.en
    1. Suchabfrage in einer temporären Tabelle speichern
    Das scheint wohl am meisten Sinn zu machen.

    //Stefan

  6. #6
    TP-Specialist theo bringt sich richtig ein Avatar von theo
    Registriert seit
    Apr 2002
    Ort
    743, evergreen terrace
    Beiträge
    2.346
    ueber die aenderung des statements wuerde es auch gehen. aber wozu jedesmal die db abfragen, wenn die daten schon da sind?
    klar ... ein mehrdimensionales array staendig neu rauf- und runtersortieren kostet etwas zeit beim scripten und einige unruhige minuten fuer die grauen zellen. aber das sollte sich lohnen.

    ... es sei denn, deine daten aendern sich haeufig.

    @steffen: hatte ich noch gar nicht gesehen (*grrrrrrrrrrrr* und ich hab die letzten tage wie ein held mit mehrdimensionalen monstern gekaempft ). dafuer gibts nachtraeglich noch ein fettes bienchen!


    gruss
    hardy
    /b{2}|[^(bb)]/

    [Workshop] Nested sets

  7. #7
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    Ehrlichgesagt - ich würde auch die Array-Methode bevorzugen.

    Du hast ja Sessions, also kannst Du einen Sessionzweig dafür nehmen, Du könntest auf Getparameter verzichten und das ganze sehr effizient und ressourcensparend ausgeben.


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  8. #8
    TP-Supporter Stefan_G hilft, wo's geht Stefan_G hilft, wo's geht Stefan_G hilft, wo's geht Avatar von Stefan_G
    Registriert seit
    May 2005
    Ort
    Tecklenburg
    Beiträge
    484
    Hallo,

    die Version mit der Temp-Tabelle habe ich grad probiert, aber da kommen schnell große Datenmengen zusammen. Gefällt mir nicht.
    Hab keine richtig Idee, wie ich das mit der Array-Methode angehen soll. Durch die angegebenen Links steige ich nicht so richtig durch.

    Bisher läuft alles in einer Datei ab - user_suche.php
    Das Suchergebnis wird ebenfalls in dieser Datei ausgeben. Die userID lasse ich - wie im ersten Posting beschrieben - in ein Session-Array fließen.

    Ausgegeben werden die Daten (Userdaten - bis zu 500 pro Abfrage) nach dem folgenden Muster:

    Überschrift (z. T. als Links für die Sortierung ausgezeichnet):
    HTML-Code:
    <div class="listtitel">
    <span class="tdid"><a href="<?php echo $PHP_SELF?>?sort=userID&amp;gesendet=go" title="nach ID sortieren" class="normlink">ID</a></span>
    <span class="tdid"><a href="<?php echo $PHP_SELF?>?sort=user_edit" title="nach Bearbeitungszustand sortieren" class="normlink">Status</a></span>
    <span class="tduser"><a href="<?php echo $PHP_SELF?>?sort=user_nachname" title="nach Name sortieren" class="normlink">Name</a></span>
    <span class="tduser"><a href="<?php echo $PHP_SELF?>?sort=user_nick" title="nach Nickname sortieren" class="normlink">Nick</a></span>
    <span class="tdplz"><a href="<?php echo $PHP_SELF?>?sort=user_plz" title="nach PLZ sortieren" class="normlink">PLZ</a></span>
    <span class="tduser"><a href="<?php echo $PHP_SELF?>?sort=user_ort" title="nach Ort sortieren" class="normlink">Ort</a></span>
    <span class="tdplz">edit</span>
    <span class="tdplz">view</span>
    </div>
    Das ist die Schleife für die Einträge nach der ersten Suchabfrage:
    PHP-Code:
    <?php 
    $i
    =0;
    while(
    $Article[$i]) :?>
    <div class="doglist">
    <span class="tdid"><a href="user_edit.php?userID=<?php echo $Article[$i]["userID"];?>" class="navi" title="<?php echo $Article[$i]["userID"];?> - Hauptdaten bearbeiten"><?php echo $Article[$i]["userID"];?></a></span>
    <span class="tdid"><?php echo $Article[$i]["user_edit"];?></span>
    <span class="tduser"><?php echo $Article[$i]["user_vorname"]." ".$Article[$i]["user_nachname"];?></span>
    <span class="tduser"><?php echo $Article[$i]["user_nick"];?></span>
    <span class="tdplz"><?php echo $Article[$i]["user_plz"];?></span>
    <span class="tduser"><?php echo $Article[$i]["user_ort"];?></span>
    <span class="tdplz"><a href="user_edit.php?userID=<?php echo $Article[$i]["userID"];?>" class="navi" title="<?php echo $Article[$i]["userID"];?> - Hauptdaten bearbeiten">edit</a></span>
    <span class="tdplz"><a href="user_details.php?userID=<?php echo $Article[$i]["userID"];?>" class="navi" title="<?php echo $Article[$i]["userID"];?> - Daten ansehen">view</a></span></div>
    <?php
    $i
    ++;
    endwhile;
    ?>
    Jetzt möchte ich, dass bei Klick auf die jew. Überschrift (s. Html) eine Sortierung der Daten (also der in dem Session-Array gespeicherten userID´s) auf der Seite nach dem jew. Parameter erfolgt. Das wäre der nächste Schritt und genau da hänge ich.

    PHP-Code:
    if($gesendet=="go" AND $sort!="") { //Abfragen ob das Form gesendet wurde und ob eine Sortierung erfolgen soll
    $query="Abfrage .... ORDER by $sort; 
    Gibt es nicht vielleicht noch ne viel einfachere Möglichkeit?

    //Stefan

  9. #9
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    Du kannst Doch die Funktion nutzen, wenn ich das richtig sehe, gehts um das $Artikel-Array, also:

    PHP-Code:
    //sortieren
    if(isset($_GET['sort'])) masort($Artikel,$_GET['sort']);

    function 
    masort(&$data$sortby){ 
       if(
    is_array($sortby)){ 
           
    $sortby join(',',$sortby); 
       } 

       
    uasort($data,create_function('$a,$b','$skeys = split(\',\',\''.$sortby.'\'); 
           foreach($skeys as $key){ 
               if( ($c = strcasecmp($a[$key],$b[$key])) != 0 ){ 
                   return($c); 
               } 
           } 
           return($c); '
    )); 


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  10. #10
    TP-Supporter Stefan_G hilft, wo's geht Stefan_G hilft, wo's geht Stefan_G hilft, wo's geht Avatar von Stefan_G
    Registriert seit
    May 2005
    Ort
    Tecklenburg
    Beiträge
    484
    Hi,

    thx!
    Werde es mal probieren, wenn es kühler wird ;-)

    //Stefan

  11. #11
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    also in 4 wochen


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  12. #12
    TP-Supporter Stefan_G hilft, wo's geht Stefan_G hilft, wo's geht Stefan_G hilft, wo's geht Avatar von Stefan_G
    Registriert seit
    May 2005
    Ort
    Tecklenburg
    Beiträge
    484
    Hallo,

    es ist dann doch eine viel einfachere Lösung geworden:
    Hab das Query der Suchabfrage in einer Session-Variablen gespeichert...
    PHP-Code:
    $query...DB-Abfrage der Suche
    ...
    $_SESSION["user"] = $query11;
    ?> 
    und setz das Query mit dem Sortierschlüssel wieder zusammen, sobald einer auf den Sortierlink klickt.
    PHP-Code:
    if($gesendet=="go" AND $sort!="") { 
     
    //sortieren 
    $query="".$_SESSION["user"]." ORDER BY $sort";
    $result=mysql_query($query);

    $i=0;
       while (
    $row mysql_fetch_array($result)) {
        
    $Article[$i]["userID"]=$row[0];
        
    $Article[$i]["user_nick"]=$row[1];
        
    $Article[$i]["user_vorname"]=$row[2];
        
    $Article[$i]["user_nachname"]=$row[3];
        
    $Article[$i]["user_plz"]=$row[4];
        
    $Article[$i]["user_ort"]=$row[5];
        
    $Article[$i]["user_edit"]=$row[6];
        
    $i++;
        
        } 
    Funktioniert so auch.

    Danke für die Tipps!

    //Stefan

  13. #13
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    gut.

    Anmerkung - warum heisst das $_SESSION["user"] ?

    Besser ist es immer sinnvolle Namen zu nutzen, damit Du auch nach mehreren Wochen noch zurechtkommst:

    $_SESSION["userquery"]


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


+ Antworten

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51