Announcement

Collapse
No announcement yet.

Suchergebnisse nach Übereinstimmung sortieren

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

  • Suchergebnisse nach Übereinstimmung sortieren

    Hallo Entwickler!

    Ich habe folgenden Code geschrieben:

    PHP Code:
    <?php
                
    $code 
    $var1.$var2.$var3.$var4.$var5.$var6.$var7.$var8.$var9.$var10.$var11.$var12.$var13.$var14.$var15.$var16.$var17.$var18.$var19.$var20;

                
    $pdo = new PDO('mysql:host=localhost;dbname=db''root''root');

    $statement $pdo->prepare("SELECT * FROM suchtabelle WHERE code LIKE ? ORDER BY ####");
    $statement->execute(array($code));   
    while(
    $row $statement->fetch()) {

    echo 
    $row['id']." ".$row['titel'];
               
    }
    ?>
    Damit möchte ich in der Mysql in der Tabelle suchtabelle das Feld "code" nach der Variable $code durchsuchen. Das klappt.

    Wie kann ich nun jedoch die Suchergebnisse nach Übereinstimmung ordnen?

    Die Codevariable sieht z.B. so aus: 10111010001010010101

    Ich brauche da unbedingt Hilfe und bin dankbar für jede Unterstützung!

    Info zu mir: Ich bin neu in PHP und MysQL.
    Zuletzt editiert von JKS; 23.10.2016, 16:51.

  • #2
    Was heißt "nach Übereinstimmung ordnen"? Übereinstimmung mit was?
    Warum "like ?" Das dürfte nicht "klappen"



    Sortiert wird die Ausgabe mit "order by"
    https://www.google.de/search?q=mysql...Cu7M8geFhoHoBA
    Christian

    Comment


    • #3
      Order by habe ich gerade auch herausgefunden, danke für deinen Link.

      Jedoch wie bekomme ich es hin, dass der code (z.B. 10100010111110010101) bzw. die Datensätzen, in denen jeweils code mit in der Spalte steht, nach Übereinstimmung geordnet werden. Eine Beispiel Ordnung wäre das (mit weniger Zahlen als Beispiel):

      Gesucht wird 10100

      Treffer werden geordnet:

      10100
      10101
      10111
      10011
      10001

      usw.

      Also je genauer die Zahlen von Anfang bis Ende umso genauer der Treffer.

      Comment


      • #4
        Wenn du nach 10100 suchst, wird wohl 10101ff nicht zu den Treffern gehören.
        Du kannst mit order by das Ergebnis nummerisch, alphabetisch, nach Datum, aufsteigend, absteigend sortieren lassen. Und das über mehrere Felder.

        Du kannst suchen, ob in einer Spalte der exakte Wert drin steht (Code=10100) oder mittels like, ob das Feld Code bsp '00' enthält (irgendwo drin, am Anfang, am Ende).
        Weitere komplexe Suchbedingungen sind möglich
        Christian

        Comment


        • #5
          Genau es ist nur ein Zahlencode! Aber keine Zahl.

          Ich brauche quasi das Ergebnis so geordnet, dass das mit den meisten 1, die übereinstimmen, oben steht.

          Sorry, war ein Denkfehler meinerseites!
          Zuletzt editiert von JKS; 23.10.2016, 17:10.

          Comment


          • #6
            Wenn das Feld in der DB ein nummerisches Feld ist -> .....order by code
            Wenn das Feld in der DB vom Typ Varchar ist -> .....order by code*1

            EDIT
            ch brauche quasi das Ergebnis so geordnet, dass das mit den meisten 1, die übereinstimmen, oben steht.
            Also alle Datensätze sortiert nach der Übereinstimmung der Position von 1 nach einem gegebenen Suchbegriff?
            Zuletzt editiert von Christian Marquardt; 23.10.2016, 17:17.
            Christian

            Comment


            • #7
              Ich habe eine Lösung gefunden.

              Ich mache nicht 1 und 0 sondern baue daraus eine Zahl und lasse diese dann nummerisch ordnen.

              Danke!

              Comment


              • #8
                Das ist dann genau das was ich dazu brauche! Danke!

                Comment


                • #9
                  Du haettest auch in Deiner Suchanfrage alle Ziffern bis zur letzten 1 nehmen koennen. Also wie im Beispiel oben:

                  10100

                  daraus wird fuer das Suchen dann

                  101

                  weil das die signifikanten Stellen zum Suchen sind. Die restlichen sollen ja ignoriert werden wenn ich es richtig verstanden habe. Danach kannst Du mit

                  SELECT * FROM Tabelle WHERE wert like '101%'

                  alle Zeilen finden die mit 101 anfangen.

                  Comment


                  • #10
                    Originally posted by fanderlf View Post
                    Du haettest auch ...
                    Das finde ich aber etwas weit aus dem Fenster gelehnt ohne Kenntnis der Kodierung.
                    Aus der Anfrage geht m.E. nicht hervor, ob die Länge des Codes eine Rolle spielt. Bei Verdacht auf Bitcodierung von Suchkriterien würde es evtl. eine Rolle spielen. Wenn der TE aus dem Code "eine Zahl baut"(wie auch immer), fragt man sich wie die numerische Sortierung dieser "gebauten Zahl" mit der Anforderung "meiste 1, die übereinstimmen" zusammen geht.
                    Gruß, defo

                    Comment


                    • #11
                      alle Zeilen finden die mit 101 anfangen.
                      Das war nicht gewünscht. Siehe Beitrag #3, #6
                      Es sollen auch die gefunden werden, die "weniger" 1 haben oder an anderer Position. Also
                      001
                      100
                      010
                      oder auch
                      110
                      011
                      Zuletzt editiert von Christian Marquardt; 25.10.2016, 19:34.
                      Christian

                      Comment

                      Working...
                      X