Ankündigung

Einklappen
Keine Ankündigung bisher.

Fortgeschrittenes sortieren

Einklappen

Neue Werbung 2019

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

  • Fortgeschrittenes sortieren

    Hallo,

    gibt es eine möglichkeit folgendes mit MySQL zurealisieren:

    Ich habe folgende Datensätze

    Name,Geschlecht,Rauchverhalten,familienstand

    1. Datensatz
    Ließchen Klein, Frau, nicht-Raucher, ledig
    2. Datensatz
    Werner Werner, Mann, nicht-raucher,ledig
    3. Datensatz
    Miriam Goldhofer, frau, raucher, ledig

    Mein Query schaut jetzt folgendermaßen aus

    $query="SELECT name FROM kontakte WHERE Geschlecht='Frau' or Rauchverhalten='raucher' or familienstand='ledig';";

    ==> Ergebnis werden alle datensätze sein, ich möchte
    aber das Ergbnis so sortieren das der Datensazt mit den meisten übereinstimmung als erstes kommt:
    Reinfolge der ausgabe:

    1. -> Miriam Goldhofer
    2. -> Ließchen Klein
    3. -> Werner Werner

    Wie kann man so etwas realisieren

  • #2
    du kanns tdir wenn du dir das in ein Array stecken lässt mit prioritäten versehen .. und wenn $array[1]=Frau && $array[1]=raucher && $array[1]=ledig dann höchste priorität ..

    dann danach sortieren und fertig .. ??

    aber sicher gibts auch andere Lösungen.

    Kommentar


    • #3
      Folgende Lösung fällt mir ein:

      Code:
      SELECT name, @p1:=Geschlecht='Frau', @p2:=Rauchverhalten='raucher', @p3:=Familienstand='ledig', @p1+@p2+@p3 as pt 
      FROM kontakte 
      ORDER by pt desc
      Damit verteilt er "Punkte" (1) falls das Kriterium zutrifft. pt addiert alle Punkte. ORDER sortiert nach Gesamtpunktzahl absteigend.

      Funktioniert aber glaube ich nur mit MySQL 5.

      Kommentar


      • #4
        Zitat von philneu
        Folgende Lösung fällt mir ein:

        Code:
        SELECT name, @p1:=Geschlecht='Frau', @p2:=Rauchverhalten='raucher', @p3:=Familienstand='ledig', @p1+@p2+@p3 as pt 
        FROM kontakte 
        ORDER by pt desc
        Damit verteilt er "Punkte" (1) falls das Kriterium zutrifft. pt addiert alle Punkte. ORDER sortiert nach Gesamtpunktzahl absteigend.

        Funktioniert aber glaube ich nur mit MySQL 5.
        Vielen Dank für diese Coole Lösung!!!

        Kommentar


        • #5
          oh n1 ... kannt ich noch nciht .. klingt aber echt gut !



          werd ich mir glich zu meiner Script-Sammlung schmeißen

          Kommentar


          • #6
            Müsste da nicht geklammert werden?
            Code:
            SELECT name, @p1:=(Geschlecht='Frau'), @p2:=(Rauchverhalten='raucher'), @p3:=(Familienstand='ledig'), @p1+@p2+@p3 as pt
            FROM kontakte
            ORDER by pt desc

            Kommentar


            • #7
              Ich hab's ausprobiert hat einwandfrei funktioniert. Warscheinlich wird automatisch alles nach dem := zuerst ausgeführt und erst dann zugewiesen

              Kommentar


              • #8
                Müsste da nicht geklammert werden?
                Klammern brauch man in dieser Abfrage nicht...

                Hab zum Spaß golgendes probiert:
                Code:
                SELECT name, 
                @p1:=Geschlecht='Frau', 
                @p2:=Rauchverhalten='raucher', 
                @p3:=(Familienstand='ledig' OR Familienstand='geschieden'), 
                @p1+@p2+@p3 as pt 
                FROM kontakte 
                ORDER by pt desc
                Da brauch man die Klammern dann für die OR-Abfrage.
                Habe eine geschiedene Susi Becker, Raucher eingefügt. Bei der ersten Abfrage landet sie auf Priorität 2, bei der OR-Abfrage dann auf Prio 1, wie es sein sollte...

                Kommentar


                • #9
                  Habe das auch noch einmal selbst getestet und ebenfalls gemerkt, dass die Klammern nicht notwendig sind.
                  Ich hatte mich nur gewundert, da hier angegeben ist, dass der := Operator eine höhere Wertigkeit als der = Operator hat.

                  Kommentar


                  • #10
                    Zitat von xabbuh
                    Ich hatte mich nur gewundert, da hier angegeben ist, dass der := Operator eine höhere Wertigkeit als der = Operator hat.
                    Hm? Also ich lese daraus, dass der := Operator die geringste Wertigkeit von allen aufgeführten hat - wird ja schließlich als erstes aufgelistet (from lowest precedence to the highest).

                    Kommentar


                    • #11
                      Zitat von Werbegeschenk
                      Hm? Also ich lese daraus, dass der := Operator die geringste Wertigkeit von allen aufgeführten hat - wird ja schließlich als erstes aufgelistet (from lowest precedence to the highest).
                      Ich bin schon ruhig. Da habe ich überhaupt nicht richtig hingeschaut und war einfach davon ausgegangen, dass hier die höhere Rangfolge zuerst kommt.

                      Kommentar

                      Lädt...
                      X