Sortierproblem bei SQL Abfrage

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Sortierproblem bei SQL Abfrage

    Hi,

    ich habe ein Problem mit folgender Abfrage, und zwar wird trotz "ORDER BY id" eben NICHT nach dem ID's die natürlich auto_increment sind, sortiert

    PHP Code:
    $abfrage = ("SELECT id,spieler,planet,art,anzahl,restzeit,bauzeit
    FROM "
    .$dbprefix."que_schiffe GROUP by spieler 
    ORDER BY id"
    ); 
    Da es für jeden Spieler mehrere (beliebig viele) Einträge geben kann, aber pro Spieler immer nur der älteste Eintrag (Mit der niedrigeren ID wobei ORDER BY id gelten soll) aus der DB geholt werden soll. Ich habe ich die Abfrage entsprechend so erstellt, wie ihr sie oben seht.

    Das "ORDER BY id" funktioniert aber nicht, wenn ich einen neuen Eintrag erstelle, nimmt er dein neueren, was er ja nicht sollte, da ich kein "DESC" eingefügt habe.

    Was mache ich falsch ?

    Denke schonmal, Darky
    Last edited by mrhappiness; 25-08-2004, 14:00.
    - Carpe Noctem -

  • #2
    wenn du der datenbank nicht sagst was sie gruppieren soll, dann musst du dich nicht wundern, dass komische werte rauskommen


    du könntest eventuell in einem SELECT die niedrigste id je spieler auslesen und dann in einem zweiten SELECT die restlichen daten zu diesen IDs
    Ich denke, also bin ich. - Einige sind trotzdem...

    Comment


    • #3
      Probier mal ORDER BY id ASC wobei ich bezweifel, dass das was bringt.

      Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
      sondern mit den Augen das Manual zu lesen.

      Comment


      • #4
        Hi,

        nun ich dachte eigentlich das ich der DB mit "GROUP BY spieler" sage nach was sie gruppieren soll ?!?

        Und aus jeder Gruppe, also pro Spieler, eben einen Eintrag holen soll und zwar den, mit der niedrigsten ID, also den ältesten.

        ist das denn falsch ?

        Darky
        - Carpe Noctem -

        Comment


        • #5
          Original geschrieben von DarkWanderer
          Und aus jeder Gruppe, also pro Spieler, eben einen Eintrag holen soll und zwar den, mit der niedrigsten ID, also den ältesten.
          das gruppieren wird vor dem sortieren gemacht.
          und dabei wird pro spieler einfach ein zufälliger datensatz herausgegriffen, mit welcher ID - darauf hast du so gar keinen einfluss.

          erst anschliessend wird dann diese ergebnismenge sortiert. da isses aber schon zu spät.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Comment


          • #6
            falls es sich nur um diese eine abfrage handelt, kannst du group by auch weg lassen, oder "DISTINCT spieler" nehmen, was aber nur sinn macht, wenn du mehrere gleiche spieler in der tabelle eingetragen hast..

            Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
            sondern mit den Augen das Manual zu lesen.

            Comment


            • #7
              Hi,

              das leuchtet mir ein Wahsaga, muss ich zugeben

              Allerdings komme ich nun immer noch nicht auf den besten Lösungsweg, dachte eigentlich es wäre wirklich in einer Abfrage machbar.

              Darky
              - Carpe Noctem -

              Comment


              • #8
                Original geschrieben von DarkWanderer
                Hi,

                das leuchtet mir ein Wahsaga, muss ich zugeben

                Allerdings komme ich nun immer noch nicht auf den besten Lösungsweg, dachte eigentlich es wäre wirklich in einer Abfrage machbar.

                Darky

                du könntest eine abfrage starten, in der du die spieler sammelst, zb in einem array.

                in der zweiten entweder das array vorher sortieren oder die datenbank sortieren lassen. z.b. " WHERE id IN ( ".implode(', ',$arrayname)." ) "

                Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                sondern mit den Augen das Manual zu lesen.

                Comment


                • #9
                  ist es auch, aber ob http://www.php-resource.de/forum/sho...threadid=42179 wirklich besser/performanter ist als das mit zwei abfragen zu erschlagen


                  wenn du mysql 4.1 hast, kannst du auch mit subselects arbeiten
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Comment


                  • #10
                    Original geschrieben von mrhappiness

                    du könntest eventuell in einem SELECT die niedrigste id je spieler auslesen und dann in einem zweiten SELECT die restlichen daten zu diesen IDs
                    Wahrscheinlich habe ich da grade einen Denkfehler, aber muss ich dabei nicht wieder sortieren und nach Spielern gruppieren, also hab ich da nicht genau das gleiche ?

                    Darky
                    - Carpe Noctem -

                    Comment


                    • #11
                      Original geschrieben von DarkWanderer
                      Wahrscheinlich habe ich da grade einen Denkfehler
                      ja
                      aber muss ich dabei nicht wieder sortieren
                      nein
                      MIN() ist eine tolle mysql-funktion
                      und nach Spielern gruppieren
                      nein

                      hab ich da nicht genau das gleiche ?
                      nein

                      Darky
                      mrhapppiness, hell seiend
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Comment


                      • #12
                        Oki, dann versuch ich das mal

                        PHP Code:
                        $abfrage = ("SELECT min(id) AS datensatz FROM ".$dbprefix."que_schiffe GROUP by spieler"); 
                        Wobei in der Variablen datensatz nun die ID des Datensatzes stehen müsste, den ich bearbeiten muss.

                        Ist das so nun richtig ?

                        Darky
                        Last edited by DarkWanderer; 25-08-2004, 15:19.
                        - Carpe Noctem -

                        Comment


                        • #13
                          sollte richtig sein, probier's doch einfach mal aus
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Comment


                          • #14
                            Funktioniert, danke

                            P.S.: Auch wenn's keinen Interessiert, wollte nur mal loswerden das ich die Art in der mir hier bisher eigentlich IMMER geholfen wurde, sehr gut finde.

                            Den man wird zwar auf den richtigen Weg gebracht, was eigentlich als Antwort oft reicht, aber muss/sollte trotzdem versuchen sich selbs Gedanken darüber zu machen wie die richtige Lösung aussieht.

                            Sprich : Man bekommt keine fertige Lösung vor die Füsse geworfen aus der man genau garnix lernt weil man sie einfach nur einbaut, sondern man bekommt nen Ansatz wie das Problem zu lösen ist, der einem Hilft, die Lösung zu finden

                            Darky
                            - Carpe Noctem -

                            Comment


                            • #15
                              Siehst, war doch gar nicht so schwer


                              OffTopic:
                              Nein, er wird nicht dafür bezahlt...
                              Ich denke, also bin ich. - Einige sind trotzdem...

                              Comment

                              Working...
                              X