[MySQL 4.1] Spezielle Abfrage mit LIMIT?

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

  • [MySQL 4.1] Spezielle Abfrage mit LIMIT?

    Gegeben ist folgende Problemsituation:

    Tabelle_1 besitzt folgende Spalten.
    ID Integer Auto Increment
    payload text

    Nun habe ich eine bestimmte ID gegeben bespw. ID = 5 und möchte im Umfang von 1 alle anderen Datensätze ausgeben. In dem Beispiel wäre das dann ID=4; ID=5 und ID=6. Das wäre ja im Prinzip noch kein Problem dummerweise soll aber bei der Ausgabe nach payload sortiert werden, deshalb lassen sich die IDs dann nicht mehr so einfach errechnen.
    Wurde meine Frage deutlich?
    Hat jemand ein Idee wie ich das Problem lösen könnte?
    daniel-portal.com/games Free Games and more

  • #2
    Dirty wäre so:

    SELECT ... WHERE id IN(4,5,6) order by payload

    Aber berücksichtigst du auch, dass u.U. eine ID vier gar nicht mehr existiert oder es eine 6 noch gar nicht gibt und vielleicht nie geben wird.

    ich steh aber grad selbst auf dem schlauch. wie hast du es denn bis jetzt gemacht, ohne nach dem namen zu sortieren?

    Kommentar


    • #3
      <<Hat jemand eine Idee>> Ja - ich.

      Du kannst in einer ersten Query die Position des Datensatzes ID 5 finden und in der zweiten query mit LIMIT position-1,3

      Kommentar


      • #4
        Original geschrieben von TobiaZ
        SELECT ... WHERE id IN(4,5,6) order by payload
        Das es so gehen würde, wenn die ID's in der Abfrage fortlaufend wären is klar, ich wollte das auch nur als Beispiel nehmen um zu erklären worum es mir überhaupt geht.

        Wenn es umliegende Datensätze nicht gibt, sehe ich das ja in der Rückgabe (bzw. nicht Rückgabe *g*) der Datensätze und kann dann im Skript drauf reagieren.

        Du kannst in einer ersten Query die Position des Datensatzes ID 5 finden und in der zweiten query mit LIMIT position-1,3
        Die Idee hatte ich auch schon, jedoch würde ich es gern irgendwie inerhalb einer Query erledigen. Vielleicht könnte man da ja irgendwas mit Subselects machen. BTW wie würdest du denn die Abfrage formulieren, um die Positon des Datensatzes zu ermitteln?
        Zuletzt geändert von daniel987; 15.07.2006, 13:22.
        daniel-portal.com/games Free Games and more

        Kommentar


        • #5
          íst irgendwie alles nicht sauber.

          die ID ist nicht zum sortieren, sondern lediglich zur identifikation!

          ich denke, wenn du das in deinem DB-Layout berücksichtigst, wirst du eher ne brauchbare lösung finden.

          beschreibt mal, was du konkret vorhast

          Kommentar


          • #6
            Original geschrieben von daniel987
            BTW wie würdest du denn die Abfrage formulieren, um die Positon des Datensatzes zu ermitteln?
            ob es eine subquery ist oder zwei queries spielt kaum eine grosse Rolle (ausser bei intensivem load, und dann kommt es vielleicht noch auf anderes an). zwei queries gibt optisch eine übersichtlichere, weniger verschachtelte Programmierung.

            Position in einer bestimmten Sortierreihenfolge, zb nach dem Feld ID(=defaultReihenfolge).
            Code:
            SELECT COUNT(*) FROM $tabelle WHERE ID<='$id'
            $pos=mysql_result($result,0,0);

            edit: 'ORDER BY ID' gestrichen, ist überflüssig...
            Zuletzt geändert von mäander_; 15.07.2006, 13:48.

            Kommentar


            • #7
              Original geschrieben von TobiaZ
              íst irgendwie alles nicht sauber.

              die ID ist nicht zum sortieren, sondern lediglich zur identifikation!

              ich denke, wenn du das in deinem DB-Layout berücksichtigst, wirst du eher ne brauchbare lösung finden.

              beschreibt mal, was du konkret vorhast
              Ich sortiere ja auch nicht nach der ID, sondern nach payload, also einem anderen Feld als ID. Die ID wird wie berreits von dir erwähnt nur zum identifizieren genutzt (ist auch Prim Key). Aufgrund dieser Tatsache, ist es auch nicht möglich deine Abfrage zum ermitteln der Position zu verwenden.

              Konkretes Anwendungsbeispiel des ganzen ist eine Spiele Sektion, in der ich immer das nächste, und das vorherige Game einer bestimmten Kategorie anzeigen möchte.
              daniel-portal.com/games Free Games and more

              Kommentar


              • #8
                Original geschrieben von daniel987
                Aufgrund dieser Tatsache, ist es auch nicht möglich deine Abfrage zum ermitteln der Position zu verwenden.
                Damit hast Du natürlich nicht mein Abfragemuster gemeint??

                Kommentar


                • #9
                  Original geschrieben von daniel987
                  Konkretes Anwendungsbeispiel des ganzen ist eine Spiele Sektion, in der ich immer das nächste, und das vorherige Game einer bestimmten Kategorie anzeigen möchte.
                  Mit meiner Methode ist diese Abfrage möglich.

                  Was nicht ohne weiteres geht, ist diese drei Datensätze (Spiele) in mysql nach einem weiteren Feld zu sortieren. Das würde ich im konkreten Fall in php mit einem simplen Sort der drei $rows machen (zwei Vergleiche und fertig, ohne sortfunction). Im abstrakten Fall müsste man eine subquery machen:
                  Code:
                  select * from (select * diese drei games genau wie oben erklärt) order by payload
                  Zuletzt geändert von mäander_; 15.07.2006, 22:55.

                  Kommentar

                  Lädt...
                  X