Seite anhand der ID + ORDER BY

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

  • Seite anhand der ID + ORDER BY

    Hallo zusammen,

    stecke gerade vor einem Problem.

    Ich muss anhand einer Unique-ID die Seite herrausbekommen, wo sich der Eintrag befindet.

    Das Problem dabei ist, dass ich die Spalten noch mehrfach sortieren kann (ORDER BY field ASC, field2 DESC) etc.

    Sonst könnte ich das einfach lösen in dem ich alle Einträge vor meiner ID zähle, durch einen SubSelect, und diese dann durch die Anzahl der Items pro Seite teile.

    Nur bei einem mehrfach sortieren Ergebnis geht das nicht mehr.

    Hat jemand einen Lösungsansatz wie ich das in MySQL erreichen kann?

    LG Toby

  • #2
    Ich verstehe dein Problem, aber die Beschreibung ist zu vage um darauf vernünftig antworten zu können.
    Post mal Code.

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Hallo,

      danke erstmal für die Antwort.

      Also ich habe eine Tabelle:

      Code:
      id    (INT AUTO_INC)
      name  (VARCHAR 50)
      date  (TIMESTAMP)
      price (DOUBLE 10,2)
      Situation:

      Ich habe eine simple Tabellenansicht der Einträge. Diese kann ich beliebig sortieren, auch kombiniert; sprich id asc, name desc, date asc usw.

      Zusätzlich werden mir nur 20 Einträge auf einer "Seite" angezeigt (LIMIT)

      Solange ich nichts sortiere kann ich mittels;
      Code:
      SELECT
         id,
         name,
         FLOOR(
            (
               SELECT 
                  COUNT(id)
               FROM
                  aufgabe_4
               WHERE
                  id < 134
            ) / 20
         ) AS `page`
      FROM
         aufgabe_4
      WHERE
         id = '134'
      LIMIT 0, 20
      mir die Seite anzeigen wo sich zbs. die ID 134 befindet (Auf Seite 7 bei 9999 Einträgen).

      Sortiere ich nun diverse Spalten ASC; DESC usw erhalte ich diesen Query:

      Code:
      SELECT
         id,
         name,
         FLOOR(
            (
               SELECT
                  COUNT(id)
               FROM
                  aufgabe_4
               WHERE
                  id < 134
               ORDER BY
                  `id` ASC,
                  `name` DESC,
                  `date` DESC,
                  `price` ASC
               ) / 20
         ) AS `page`
      FROM
         aufgabe_4
      WHERE
         id = '134'
      ORDER BY
         `id` ASC,
         `name` DESC,
         `date` DESC,
         `price` ASC
      LIMIT 0, 20
      Stimmt das Ergebniss nicht mehr, da in dem SubQuery nicht die Anzahl der Einträge gezählt werden die nach meiner gesuchten ID sind.

      Leider finde ich keine Möglichkeit diese Anzahl zu ermitteln.

      LG Toby

      Kommentar


      • #4
        Hallo,

        habs mal quick'n'dirty gelöst:

        PHP-Code:
        // Ich suche die ID 3242
        $iID 3242;

        $sOrderByStatement generateOrder();

        mysql_query('SET @count=0;');
        $sStatement '
            SELECT 
                @count:=@count+1 AS idx,
                id,
                name,
                floor(@count / ' 
        $iItemsPerPage ') as page
            FROM
            aufgabe_4' 
        .
        $sOrderByStatement;

        $rResult mysql_query($sStatement);
        while (
        $aData mysql_fetch_array($rResultMYSQL_ASSOC)) 
            if (
        $aData['id'] == $iID) return $aData

        Wobei bei + 1 mio. Daten die Whileschleife sehr unperformant ist.

        Kommentar


        • #5
          ORDER BY
          `id` ASC,
          `name` DESC,
          `date` DESC,
          `price` ASC
          Das ist doch überflüssig?
          ID ist unique, sprich es wird aufsteigend danach sortiert - name, date und price sind dabei doch irrelevant?!

          Dementsprechend sehe ich da jetzt spontan auch keinen Grund warum dein Query falsch zählen sollte :S

          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
          Wie man Fragen richtig stellt

          Kommentar

          Lädt...
          X