order by mit 100% ergebnissen zu erst

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

  • order by mit 100% ergebnissen zu erst

    Hi Forum,

    ich hab hier gerade ein interessantes Problem, bei dem Ich leider auch nicht weiter komme.

    Ich habe in einer Modeldatenbank als Beispiel den Brustumfang hinterlegt.
    Nun will ich bei der Suche nach einer Größe (hier 90), eine Toleranz von 14 bzw 7 in jede Richtung einsetzen ...

    Such begriff 90 sähe das zB so aus:
    PHP-Code:
    SELECT FROM `modelsWHERE (`chest` > "83" AND `chest` < "97") AND `draft` = 0 ORDER BY `chestDESC LIMIT 0,
    Das Problem was ich jetzt habe, das ich in der Sortierung eigentlich die 100% Treffer als erstes Ausgeben müsste. Weil wenn ich nen Typen mit 90 Brustumfang suche, will Ich ja nicht zu erst nen 97er haben.

    Die große Frage wäre daher nun: wie kann ich das am sinnvollsten in einem String ermöglichen?

    Ich würde gerne den nachfolge Prozess von dieser Änderungen unbeeinträchtigt lassen und somit alles in der SQL Abfrage abarbeiten.

    Grüße,
    Jon
    Design & Coding with a breeze of madness at xjonx

  • #2
    Änder erst mal das hier.
    PHP-Code:
    `chest` > 83 AND `chest` < 97 
    Peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Zitat von Kropff Beitrag anzeigen
      Änder erst mal das hier.
      PHP-Code:
      `chest` > 83 AND `chest` < 97 
      Peter
      du meinst die anführungsstriche wegen INT() suche?
      Design & Coding with a breeze of madness at xjonx

      Kommentar


      • #4
        Bilde einfach noch den Betrag der Differenz zwischen gesuchtem und gefundenem Wert, und sortiere danach.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          ok. das klingt logisch. mag mir jmd kurz erklären wie das genau geht?
          also aufbau oder "befehl" ?
          Design & Coding with a breeze of madness at xjonx

          Kommentar


          • #6
            Betragsfunktion siehe MySQL-Handbuch, Rest steht eigentlich schon da.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Sql

              Hi Jon!
              Und wennst einfach 2 SELECT Befehle machst und mit UNION dann zusammenschmeißt? 1* SELECT mit genauem Suchergebnis (brauchst nicht zu sortieren) und 1* SELECT mit Umfang < > sortiert.

              Ich halte die Differenz nicht unbedingt für die Lösung, da ja auch ein kleineres Ergebnis durch die Sortierung oben stehen könnte. Wenn ich 90 Umfang habe, dann soll 90 oben stehen und nicht 87 oder 97.

              Also einmal select ... where = 90 UNION select ... < > order by ...;

              Viele Grüße,
              Ingo

              Kommentar


              • #8
                Zitat von ecswebhosting Beitrag anzeigen
                Ich halte die Differenz nicht unbedingt für die Lösung, da ja auch ein kleineres Ergebnis durch die Sortierung oben stehen könnte.
                Wie meinen?
                Wenn ich 90 Umfang habe, dann soll 90 oben stehen und nicht 87 oder 97.
                Eben.

                Bei dem Datensatz, der den Wert 90 enthält, ist die Differenz zum gesuchten Wert 0 - und deshalb wird der weiter nach oben sortiert als der mit dem Wert 87, wo die Differenz 3 beträgt, und der damit immer noch vor dem mit 97 kommt, bei dem die Differenz 7 ist ...
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Hallo!

                  Stimmt, die Differenz 0 wäre ganz oben, das habe ich jetzt wiederum nicht bedacht.

                  Aber wäre es denn nicht sinnvoll, wenn anschließend die Größen durchgehend aufsteigend kämen? Bei Differenz wäre das doch nicht sichergestellt, da 91 und 89 dieselbe Differenz zu 90 hätten? Ich würde aus diesem Grund das nach wie vor mit UNION und 2 Abfragen machen - die 1. mit = 90 und die 2. Abfrage wie bereits beim ursprünglichen SQL-Statement sortieren lassen. So wäre 90 oben und danach käme 83...97.

                  Viele Grüße,
                  Ingo
                  ECS-Webhosting

                  Kommentar


                  • #10
                    Zitat von ecswebhosting Beitrag anzeigen
                    Aber wäre es denn nicht sinnvoll, wenn anschließend die Größen durchgehend aufsteigend kämen?
                    Das käme dann auf die genaue Aufgabenstellung an ...
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Wahsaga hat schon Recht. 91 weicht genauso weit vom Wunsch ab wie 89. In sofern drückt die Differenz genau das aus, was gewünscht ist.

                      Und selbst wenn größere Umfänge bevorzugt werden sollen, dann würde ich eher ein zweites Argument (umfang > 90,0,1) mit einbringen, denn das (91,89,86,97) ist immernoch sinniger als die reine sortierung nach der größe (97,91,89, 86) wie in dem union-statement.

                      Nur um mal ein bisschen über den Tellerrand zu schauen und weil hier grad nichts los ist.

                      Kommentar


                      • #12
                        da kämme es auch zu meiner hintergrundidee, zu der ich nicht direkt das gefunden habe, was das problem lösen würde.

                        gesprochen würde ich sowas suchen:

                        SELECT ... WHERE max differenz zu 90 = 7

                        wobei das dann im ergebnis die, die am nächsten dran sind, halt oben stehen sollten.
                        Design & Coding with a breeze of madness at xjonx

                        Kommentar


                        • #13
                          Zitat von xJonx Beitrag anzeigen
                          gesprochen würde ich sowas suchen:

                          SELECT ... WHERE max differenz zu 90 = 7
                          Wenn du alle Datensätze haben willst, wo die Differenz maximal 7 beträgt - dann setze es als simple kleiner-gleich-Bedingung um.

                          wobei das dann im ergebnis die, die am nächsten dran sind, halt oben stehen sollten.
                          Wie das geht, das haben wir inzwischen so breit erklärt, dass es ein Grundschüler hinbekommen dürfte.
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar

                          Lädt...
                          X