Ankündigung

Einklappen
Keine Ankündigung bisher.

Ausgabe im Array sortieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Ausgabe im Array sortieren

    Hallo liebe com,

    Ich habe eine SQL-Ausgabe in ein Array gepackt und möchte dies ohne eine neue SQL-Anweisung zu senden, sortieren.



    PHP-Code:
    <?php
    $ResultPointer 
    mysql_query("SELECT * FROM events") or die(mysql_error()); ?>
     
    <table border="0" class="veranstaltung">

    <?   
        while ($row = mysql_fetch_array($ResultPointer, MYSQL_BOTH)) {
        
        foreach($row as $res)
           $sortAux[] = $res['theme']; //sortieren nach Spalte 'spaltenname'
            array_multisort($sortAux, SORT_ASC, $row);
      
        echo "<tr>
        <td colspan=\"5\">";<? echo $row['theme']; ?> 
        <? echo "</td></tr>.....
    ?>
    Dabei erhalte ich folgende zwei Fehlermeldungen:
    Warning: array_multisort(): Array sizes are inconsistent in ...... on line 10

    Warning: array_multisort(): Array sizes are inconsistent in ...... on line 10
    Wie kann ich die Sortierung realisieren bzw. was ist falsch?

  • #2
    Re: Ausgabe im Array sortieren

    Zitat von smartdragon
    [php]<?php
    foreach($row as $res)
    $sortAux[] = $res['theme']; //sortieren nach Spalte 'spaltenname'
    array_multisort($sortAux, SORT_ASC, $row);
    Ich finde es am einfachsten, dass SQL das übernimmt. Mit array_multisort habe ich daher noch nie gearbeitet. Ich weiß nicht, ob es Fehler sind,

    Trotzdem Hinweis:
    mysql_fetch_array() liefert dir alle Spalten doppelt, numerischer Index + assoziativer.

    in foreach()'s $res steht der Wert einer Datenbankzelle. Mein Verständnis sagt, dass es kein Array ist, de ein Element namens 'theme' enthalten könnte.

    $sortAux wird bei dir nie resetet, es wächst pro while() durchlauf um die Anzahl der Spalten. Das ist wohl kaum gewünscht?!

    Mach mal ein
    [php:574a75d62b]
    <?php
    echo '<pre>';
    print_r($sortAux);
    echo '</pre>';
    ?>[/php:574a75d62b]
    mit in die while-Schleife. Übrigens, ob du per MySQL oder PHP sortierst macht keinen Unterschied, du hast eher noch mehr Aufwand, da MySQL in der Hinsicht "geübter" ist und du dir ansonsten den kompletten Array merken musst, wenn du neu sortieren willst (Page-Reload).

    Wenn du also umsonst MySQL-Abfragen machen kannst (vor kurzem war hier ein Spezi, der dafür pro Anfrage gezahlt hat) und dein MySQL-Server Anfragen normal schnell bearbeitet, machs mit MySQL

    Kommentar


    • #3
      ich würde das auch gerne mysql machen lassen, jedoch gehen dabei die vorher selectierten Datensätze verloren, da es, mir keine bekannte, Abfrage a la

      PHP-Code:
      <?php
      $result1 
      mysql_query ("select * from events WHERE w=1 ORDER BY category DESC")
      $sort1 mysql_query ("select * from ($result1) ORDER BY name DESC)
      $sort2 = mysql_query ("select from ($result1ORDER BY xyz DESC)?>
      gibt.

      Es wäre daher wahrscheinlich nur die Möglichkeit übrig ($result1) in ein ASSOC und NUM Array zu packen, damit die Zeilen mit den Spalten referentiell sind und dann zu sortieren. Da kommt dann wohl nur fetch_array in Frage, da fetch_row nur einzelne Zeilen liefert und fetch_object nur einen Zugriff auf Daten per Feldnamen erlaubt.

      Da muss ich mal einiges Ausprobieren... und ich brauche nicht pro Anfrage bezahlen
      Ich frage mich wo es sowas geben soll und wer das zählt?

      Kommentar


      • #4
        Stichwort JOIN vielleicht?
        Wie sehen deine Datenbank-Tabellen aus und was möchtest du genau als Ergebnis haben?

        Kommentar


        • #5
          Das meiste wurde ja schon vor mir gesagt (smartdragon, du hast einen fehler im code ), es ist besser mit Mysql zu sortieren.

          Aber wenn du multisort benutzen willst, so gehts:
          Die angegebenen Arrays werden als Spalten einer Tabelle behandelt
          Du gibst also nicht an, nach welcher Spalte das ganze sortiert werden soll, sondern packst das erste Array einfach als erstes rein.
          Wenn du nach Spalte1, Spalte3, Spalte2 sortieren willst, geht das so:
          PHP-Code:
          <?php
          array_multisort
          ($Spalte1,$Spalte3,$Spalte2);
          //oder
          array_multisort(array($Spalte1,$Spalte3,$Spalte2));
          ?>
          nach dem ersten Array kann man, wie du es auch getan hast, noch die im manual bezeichneten FLAGs einsetzen.
          Beachte aber, dass es sich bei den Arrays um die Spalten, nicht um die Zeilen handeln soll. So kannst du an die Zeilen kommen:

          PHP-Code:
          <?php
          $spalten 
          = array();
          while(
          $row mysql_fetch_assoc($result)) {
             foreach(
          $row AS $name => $value)
                
          $spalten[$name][] = $value;
          }
          ?>
          danach enthält $spalten alle spalten, allerdings nicht zwingen in der richtigen Reihenfolge. Ich hoffe mal, dass du das sortieren der Spalten im array hinbekommst, oder einfach gleich die mysql-sortierung nimmst, helfe aber natürlich auch gerne weiter, falls es andere probs gibt :wink:

          Kommentar


          • #6
            O.K. danke Buhmann und Zergling ich versuche es mal mit mysql.

            Die Tabellen:

            events
            - event_id (auto_incr) PK
            - date1 (date) //Anfangsdatum
            - date2 (date) //Enddatum
            - theme
            - info
            - mo (checkbox für Montag)
            - ...
            - so (checkbox für Sonntag)
            - worker_id (FK)
            - category_id (FK)

            category
            - id (auto_incr) PK
            - category

            worker
            - id (auto_incr) PK
            - name
            - email
            - tel

            das wären die Tabellen.

            Das Abfrage-Ergebnis sieht so aus, dass das jeweilige Event mit der dazugehörigen Kategorie und dem Mitarbeiter nach verschiedenen ausgewählten Kriterien bereits ausgegeben wird. Soweit funktioniert das.

            Weiterhin soll es möglich sein diese Ausgabe per Klick (Button oder Grafik) zu sortieren. z.B. nach category DESC, theme DESC, name DESC etc. ohne dass vorherige Ergebnis (weil schon nach Kriterien z.B. Zeit sortiert) zerstört wird.

            Beispiel unter: http://clients.smartdragon.de/test/veranstaltungen.php

            Kommentar


            • #7
              Was ist FK? PK = PrimaryKey nehme ich an.

              Also nach den Spalten innerhalb von 'events' kannst du ja sowieso ohne Probleme mit
              Code:
              ORDER BY events.<spaltenname>
              sortieren.

              Wenn ich mich nicht täusche, geht das aber auch mit den anderen Spalten
              Code:
              ORDER BY category.<spaltenname>
              (Anmerkung: Eine Spalte sollte nicht gleich heißen wie eine Tabelle, ein reserviertes Wort oder eine Datenbank. Bei MySQL klappt das zwar meistens, da durch die Position des Begriffs klar ist, was für ein Typ gemeint ist, aber den "Leser" verwirrt das möglicherweise)

              Eventuell musst du nach der zu sortierenden Spalte gruppieren. Stichwort: GROUP BY

              Kommentar


              • #8
                Ja, das mit den Bezeichnungen ist mir klar. FK (ForeignKey) da mysql aber sowas wie referentielle Int. nicht wirklich kennt, soll hier nur darauf hingewiesen werden, dass sich dieses Feld eine Beziehung zu einem Feld einer anderen Tabelle hat... (das wolltest du doch hören ? :wink: )

                Jedenfalls löst auch group etc. wohl nicht mein problem, da hier eine Sortierung eines Ergebnisses einer vorangegangenen mysql_query welche schon sortiert wurde, passieren soll. s.obiger "wunsch mysql_sortier_befehl"

                d.h.:

                Abfrage:. select menge x aus 10 sortier nach y //ergibt z.B. 5 Datensätze
                Anzeige: 5 Datensätze (aus mysql_fetch_object) nach y sortiert
                Sortiere: diese 5 Datensätze jetzt aber nach z DESC //weil user gerne pfeiltasten drückt
                Anzeige: 5 Datensätze nach z DESC sortiert

                Ich denke nicht dass das in mysql lösbar ist, lasse mich aber gerne überaschen.



                @Zergling

                Wenn ich mich nicht täusche, geht das aber auch mit den anderen Spalten
                Du täuschst dich nicht, da die select-Anweisung alle ausgewählten Felder/Spalten auch aus mehreren Tabellen in einer Tabelle zusammenfasst und somit auch zur Verfügung stehen.

                Kommentar

                Lädt...
                X