LIKE Befehl fehlerhaft

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

  • LIKE Befehl fehlerhaft

    Hi,

    da ich meine Website von einem Apache Linux auf einen XAMP Server verschieben musste habe ich nun einen Fehler in meiner SQL Abfrage:

    Die gleiche Abfrage die auf dem alten Server funktioniert hat, klappt nun nicht mehr:

    $abfrage="SELECT institut AS Institut, typ AS Typ, titel AS Titel, betreuer AS Betreuer, ausgabedatum AS Ausgabedatum, name AS Student,unternehmen AS Unternehmenm, status as Status FROM anfrage WHERE betreuer LIKE '$username' ORDER BY '$sortiert' ASC";

    Meine Intentention dahinter ist, dass auch Zeilen ausgegben werden, in der der Benutzer zusätzlich zu seinem Benutzernamen 'Mustermann' auch 'Max Mastermann' angeben kann und es werden die Zeilen mit "Mustermann" UND "Max Mustermann" ausgegeben.

    Jetzt gibt mir MySQL mit "Mustermann" die richtige Tabelle aus, mit "Max Mustermann" allerdings eine komplett leere Tabelle.

    Ich weiß leider nicht woran das liegen könnte, weil der Befehl wie gesagt vorher auf dem anderen Server funktioniert hat.

    Schonmal vielen Dank für eure Antworten!

    JCDenton

  • #2
    War steht in $username bzw. wie sieht die fertige Query aus?

    Kommentar


    • #3
      Eine mögliche Query wäre z.b.:

      "SELECT institut AS Institut, typ AS Typ, titel AS Titel, betreuer AS Betreuer, ausgabedatum AS Ausgabedatum, name AS Student,unternehmen AS Unternehmenm, status as Status FROM anfrage WHERE betreuer LIKE 'Mustermann' ORDER BY 'betreuer' ASC"

      Das wär ein Anfrage die funktioniert.

      Eine Anfrage die kein Ergebnis (leere Tabelle) zurückliefert:

      SELECT institut AS Institut, typ AS Typ, titel AS Titel, betreuer AS Betreuer, ausgabedatum AS Ausgabedatum, name AS Student,unternehmen AS Unternehmenm, status as Status FROM anfrage WHERE betreuer LIKE 'Max Mustermann' ORDER BY 'betreuer' ASC

      Kommentar


      • #4
        Muss es nicht
        Code:
        LIKE '%$username%'
        lauten?

        Kommentar


        • #5
          Original geschrieben von PHP-Desaster
          Muss es nicht
          Code:
          LIKE '%$username%'
          lauten?
          nein, damit klappt es gar nicht. Zumindestens nicht auf dem XAMPP Server. Auf dem alten Linux Server waren die Prozentzeichen auch noch drin.

          Diese Anfrage funktioniert ja so auch komplett richtig:

          "SELECT institut AS Institut, typ AS Typ, titel AS Titel, betreuer AS Betreuer, ausgabedatum AS Ausgabedatum, name AS Student,unternehmen AS Unternehmenm, status as Status FROM anfrage WHERE betreuer LIKE 'Mustermann' ORDER BY 'betreuer' ASC"

          Nur dann könnte ich auch betreuer=$username setzen. Das will ich aus oben genanneten Gründen nicht, da das LIKE aufgrund des erweiterten Benutzernamens ('Max Mustermann') da steht.

          Kommentar


          • #6
            Jetzt gibt mir MySQL mit "Mustermann" die richtige Tabelle aus, mit "Max Mustermann" allerdings eine komplett leere Tabelle.
            Ist ja auch logisch. Du scheinst keinen Eintrag Max Mustermann zu haben. Also was soll LIKE denn finden? Zerlege den Namen doch in Vor- und Nachname (falls in der Usereingabe vorhanden)
            PHP-Code:
            $sql "...WHERE betreuer = '".$vorname." ".$nachname."' OR betreuer LIKE '%$nachname%' ORDER BY betreuer ASC"
            Irgendwie so in der Art würde ich das mal probieren

            Gruss

            tobi
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              Das diese Abfrage bei gleichen Daten auif einem anderen Server andere Resultate geliefert haben soll, ist kompletter Unsinn.
              Eine Abfrage mit LIKE ohne Wildcards (Platzhalter, % oder _) macht keinen Sinn, da kannst du gleich '=' nehmen(was der Performance sicher förderlich ist).
              Und mit LIKE "%Mustermann%" wirst du sowohl den Mustermann, als auch den Max Mustermann finden, aber natürlich nicht umgekehrt.
              Gruss
              H2O

              Kommentar


              • #8
                Original geschrieben von H2O

                Und mit LIKE "%Mustermann%" wirst du sowohl den Mustermann, als auch den Max Mustermann finden, aber natürlich nicht umgekehrt.

                Wie bekomme ich denn die Umkehrung hin? Also wenn ich den vollen Namen "Max Mustermann" als Benutzernamen habe, da der Vor/Nachnamen beide in einer Spalte stehen(nicht auf meinen Mist gewachsen) und ich die Einträge von "Mustermann" haben möchte.


                Nochmal etwas genauer was ich haben möchte: In der Tabelle der Datenbank kann entweder der Name 'Mustermann' ODER der Name 'Max Mustermann' ODER 'Mustermann und Musterfrau' als Betreuer stehen. Der Benutzer 'Max Mustermann' soll dann trotzdem alle seine Arbeiten angezeigt bekommen, die er mit den drei Namen in die Datenbank geschrieben hat.


                JCDenton
                Zuletzt geändert von JCDenton; 03.12.2007, 20:38.

                Kommentar


                • #9
                  PHP-Code:
                  $sql "... WHERE betreuer LIKE '%"
                       
                  .preg_replace('/\s+/'"%' OR betreuer LIKE '%"$username)."%'"

                  Kommentar


                  • #10
                    Original geschrieben von onemorenerd
                    PHP-Code:
                    $sql "... WHERE betreuer LIKE '%"
                         
                    .preg_replace('/\s+/'"%' OR betreuer LIKE '%"$username)."%'"
                    Danke onemorenerd,

                    deine Anfrage funktioniert und ich habe sogar verstanden warum!

                    Vielen Dank an dich und an alle anderen die mir in diesem Thread geholfen haben!

                    Zur Vollständigkeit halbe hier die nun korrekte Anfrage:

                    $abfrage="SELECT institut AS Institut, typ AS Typ, titel AS Titel, betreuer AS Betreuer, ausgabedatum AS Ausgabedatum, name AS Student,unternehmen AS Unternehmenm, status as Status FROM anfrage WHERE betreuer LIKE '%".preg_replace('/ +/', "%' OR betreuer LIKE '%", $username)."%' ORDER BY '$sortiert' ASC";



                    JCDenton
                    Zuletzt geändert von JCDenton; 04.12.2007, 02:18.

                    Kommentar


                    • #11
                      Freut mich zwar, dass es funktioniert, wundert mich aber auch sehr. Denn das Forum hat den Backslash von \s+ gefressen und du hast es scheinbar auch ohne \ übernommen.

                      Kommentar

                      Lädt...
                      X