Suchabfrage in MySQL

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

  • Suchabfrage in MySQL

    Hallo,

    Ich habe ein kleines Forumlar dieses sieht so aus. (siehe anhang)


    ebenfalls habe ich eine DB mit einer Tabelle namens 'mp3s'. Mit folgenden Spalten:

    id (PK)
    filename
    artist
    title
    album
    year
    track
    cd
    genre
    sekunden
    size
    bitrate
    comment
    v2version
    id3v2


    Ich möchte mir eine abfrage stellen die mir den entsprechenden Datensatz sucht. Das heißt wenn ich bei artist z.B. %die% eingebe soll er mir alle Interpreten die irgendwo ein 'die' enthalten haben auflisten. Da smacht er auch ohne Probleme. Allerdings will ich das wenn ich bei Artist %die% eingebe UND bei Titel %das% eingebe das er mir alle interpreten mit 'die' und bei Titel alle Titel von dem Interpreten die irgendwo ein 'das' stehen haben. Natürlich kann es aber auch sein das ich was bei Titel udn ALbum eingebe oder dann mal wieder nur bei Jahr oder oder oder. ALso ihr seht das muss immer funktionieren.

    Wie gehe ich an das Problem ran? Habe einfach keine Ideen dazu. Vieleicht ein kelienr Tipp oder ein Beispiel.

    Danke udn Grüße
    Jochen
    Angehängte Dateien

  • #2
    Re: Suchabfrage in MySQL

    Stelle die WHERE-Klausel deiner Abfrage dynamisch zusammen - und nehme darin nur die Spalten auf, in denen gesucht werden soll. Verbinde mehrere Suchkritierien mit einem geeigneten logischen Operator wie AND oder OR.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Also sprich ich muss auslesen wo der User was eingegeben hat und mir daraus dann meine SQL Abfrage zusammen bauen?

      Sprich

      if user hat eingegeben artist AND Titel then Select * from mp3s where artist LIKE usereingabe AND title LIKE usereingabe.

      Wenn ich das so mache wird das doch endlos, denn der USer hat ja x beliebige Möglichkeiten.

      um genau zu sein habe ich 12 Felder für die EIngabe und der User kann in jedes Feld was rein schrieben was so viel heißt wie 12 hoch 12 Möglichkeiten.

      Kommentar


      • #4
        Vorsicht! nicht getestet
        PHP-Code:
        $where="";
        $felder=array('id','artist','title','album','year',
                               
        'track','cd','genre','sekunden','size',
                               
        'bitrate','comment','v2version','id3v2');
        foreach(
        $felder as $f){
        if(!empty(
        $_POST[$f]))
         
        $where.=" ".$f." like'".mysql_real_escape_string($_POST[$f])."' and";
        }

        $query="select * from keineahnung where".substr($where,0,-3);

        $hand=mysql_query($query)
        or die(
        mysql_error()."bei ".$query); 
        Slava
        bituniverse.com

        Kommentar


        • #5
          okay sinn habe ich soweit einigermaßen glaube ich verstanden.

          Nu was soll das:

          if(!empty($_POST[$f]))

          was ist $_POST von $f???

          und wenn ich das gedanklich richtig entlang gehe dann wird doch zum Schluss in $where auf jedenn fall noch ein AND stehen oder?

          Schon mal vielen Dank.

          LG Jochen

          Kommentar


          • #6
            Original geschrieben von Jache84
            okay sinn habe ich soweit einigermaßen glaube ich verstanden.

            Nu was soll das:

            if(!empty($_POST[$f]))

            was ist $_POST von $f???

            und wenn ich das gedanklich richtig entlang gehe dann wird doch zum Schluss in $where auf jedenn fall noch ein AND stehen oder?

            Schon mal vielen Dank.

            LG Jochen
            <<Nu was soll das: if(!empty($_POST[$f]))>>
            ich gehe davon aus, dass du die formularfelder mit gleichn namen wie Tabellenspalten benennst.
            Was $_POST ist, miss du wissen.

            <<<und wenn ich das gedanklich richtig entlang gehe dann wird doch zum Schluss in $where auf jedenn fall noch ein AND stehen oder?>>
            nee
            dafür habe ich
            substr($where,0,-3)
            gemacht
            Slava
            bituniverse.com

            Kommentar


            • #7
              Okay wenn ich das so mache:

              PHP-Code:
              $ID3FELDER=array
                  (
                  
              "ID:",
                  
              "Dateiname:",
                  
              "Interpret:",
                  
              "Titel:",
                  
              "Album:",
                  
              "Aufnahmedatum:",
                  
              "Tracknummer:",
                  
              "CD:",
                  
              "Genre:",
                  
              "Länge:",
                  
              "Dateigröße:",
                  
              "Bitrate:",
                  
              "Kommentar:",
                  
              "ID3V2 Version:"
                  
              );
              $id=$_GET['id'];
              $artist=$_GET['artist'];
              $album=$_GET['album'];
              $year=$_GET['year'];
              $track=$_GET['track'];
              $cd=$_GET['cd'];
              $genre=$_GET['genre'];
              $lenght=$_GET['lenght'];
              $size=$_GET['size'];
              $bitrate=$_GET['bitrate'];
              $comment=$_GET['comment'];


              $felder=array('id','artist','title','album','year',
                                     
              'track','cd','genre','sekunden','size',
                                     
              'bitrate','comment','v2version','id3v2');
              $where "";
              foreach(
              $felder as $f){
                  
              if(!empty(
              $_POST[$f]))

               
              $where=" ".$f." like '".mysql_real_escape_string($_POST[$f])."' and";
              }
              echo 
              $where
              dann bekomme ich in $where nichts ausgegeben. Woran kann das liegen?

              Das Problem liegt irgendwie in meiner if abfrage. Denn wenn ich $f in der foreach schleife ausgeben lasse bekomme ich das richtige angezeigt.


              Im Internet Explorer sieht meine Leiste folgendermaßen aus, sprich im Moment möchte ich halt nur nach dem Interpreten suchen:

              (siehe Anhang)


              Danke und Gruß
              Jochen

              Kommentar


              • #8
                Hier jetzt der Anhang
                Angehängte Dateien

                Kommentar


                • #9
                  solltest dich entscheiden, ob du mit POST oder GET arbeitest...

                  zusätzlich fehlt dir noch n punkt


                  where.=

                  weiter habe ich noch nicht geschaut. bereinige das erstmal...
                  **********
                  arkos
                  **********

                  Kommentar


                  • #10
                    Original geschrieben von Slava

                    Was $_POST ist, miss du wissen.

                    im screenshot sehe ich aber, dass du mit get arbeiten willst...
                    **********
                    arkos
                    **********

                    Kommentar


                    • #11
                      also ich ahbe jetzt das $POST durch $GET ersetzt und den Punkt wieder hin gemacht, ahtte ich vergessen *schäm*

                      bereinigt:

                      PHP-Code:
                      $ID3FELDER=array
                          (
                          
                      "ID:",
                          
                      "Dateiname:",
                          
                      "Interpret:",
                          
                      "Titel:",
                          
                      "Album:",
                          
                      "Aufnahmedatum:",
                          
                      "Tracknummer:",
                          
                      "CD:",
                          
                      "Genre:",
                          
                      "Länge:",
                          
                      "Dateigröße:",
                          
                      "Bitrate:",
                          
                      "Kommentar:",
                          
                      "ID3V2 Version:"
                          
                      );
                      $id=$_GET['id'];
                      $artist=$_GET['artist'];
                      $album=$_GET['album'];
                      $year=$_GET['year'];
                      $track=$_GET['track'];
                      $cd=$_GET['cd'];
                      $genre=$_GET['genre'];
                      $lenght=$_GET['lenght'];
                      $size=$_GET['size'];
                      $bitrate=$_GET['bitrate'];
                      $comment=$_GET['comment'];


                      $felder=array('id','artist','title','album','year',
                                             
                      'track','cd','genre','sekunden','size',
                                             
                      'bitrate','comment','v2version','id3v2');
                      $where "";
                      foreach(
                      $felder as $f){
                          
                      if(!empty(
                      $_GET[$f]))

                       
                      $where.=" ".$f." like '".mysql_real_escape_string($_GET[$f])."' and";
                      }
                      echo 
                      $where
                      allerdings bekomme ich jetzt folgende fehlermeldung.
                      Angehängte Dateien

                      Kommentar


                      • #12
                        1) mysql_connect muss natürlich in jedem fall durch geführt werden
                        2)
                        dieser Block
                        $id=$_GET['id'];
                        $artist=$_GET['artist'];
                        $album=$_GET['album'];
                        $year=$_GET['year'];
                        $track=$_GET['track'];
                        $cd=$_GET['cd'];
                        $genre=$_GET['genre'];
                        $lenght=$_GET['lenght'];
                        $size=$_GET['size'];
                        $bitrate=$_GET['bitrate'];
                        $comment=$_GET['comment'];

                        ist nicht nur überflüssig, sondern auch bei eingeschalteten
                        error_reporting(E_ALL) (sieh forenregeln)
                        auch fehlerhaft ist.
                        Slava
                        bituniverse.com

                        Kommentar


                        • #13
                          Ja ich habe es gerade gefunden. DANKE an ALLE!!! Funktioniert einwandfrei.

                          Liebe Grüße
                          Jochen

                          Kommentar


                          • #14
                            Original geschrieben von arkos
                            im screenshot sehe ich aber, dass du mit get arbeiten willst...
                            Gute Auge!
                            du hast nicht nur meine Schreibfehler gefunden, sondern auch die Variablen in Adressleiste von dem Bild erkannt.
                            Slava
                            bituniverse.com

                            Kommentar


                            • #15
                              Original geschrieben von Slava
                              Gute Auge!
                              du hast nicht nur meine Schreibfehler gefunden, sondern auch die Variablen in Adressleiste von dem Bild erkannt.
                              ja, auch ich habe meine hellen und wachen momente...

                              ... darauf ruh ich mich jetzt erstmal aus
                              **********
                              arkos
                              **********

                              Kommentar

                              Lädt...
                              X