Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Wie gestaltet man diese Abfrage

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Wie gestaltet man diese Abfrage

    Hi Leute,

    hab mal wieder ein recht einfaches Problem wo ich einfach nicht weiterkomme.

    ich habe eine tabelle tbl_benutzer.

    tbl_benutzer
    benutzerid | vorname | nachname
    35 John Doo


    Jeder dieser benutzer hat die moeglichkeit, beliebig viele Suchbegriffe fuers sich anzulegen unter denen er gefunden wird.
    Die tabelle mit den Suchbegriffen sieht so aus:

    tbl_suchbegriffe
    id | benutzerid | suchbegriff
    1 35 hallo
    2 35 welt

    Eine oder -Vekn�pfte suche w�rde nun so aussehen:

    SELECT
    tbl_benutzer.vorname
    FROM
    tbl_benutzer, tbl_suchbegriffe
    WHERE
    tbl_benutzer.benutzerid = tbl_suchbegriffe.benutzerid AND tbl_suchbegriffe.suchbegriff = "hello"
    OR tbl_suchbegriffe.suchbegriff = "welt"



    Wie aber gestalte ich bei dieser Struktur eine UND-Verknuepfung ?

    SELECT
    tbl_benutzer.vorname
    FROM
    tbl_benutzer, tbl_suchbegriffe
    WHERE tbl_benutzer.benutzerid = tbl_suchbegriffe.benutzerid AND tbl_suchbegriffe.suchbegriff = "hello" AND
    tbl_suchbegriffe.suchbegriff = "welt"

    Bei dieser Abfrage erhalte ich natuerlich nicht das richtrige Ergebnis, da sich die beiden Suchw�rter ja in anderen Spalten befinden.
    Aber wie muesste die Query richtig aussehn ?

    Hoffe ihr koennt mir weiterhelfen,
    greets,
    ben

  • #2
    Mal vieleicht ne dumme Frage: Wofür brauchst du denn eine UND-Verknüpfung? UND bedeutet doch dass beide Kriterien eintreten müssen und du aber nur einen Suchbegriff hast. Oder habe ich da was missverstaden?

    Kommentar


    • #3
      Ich will das der Benutzer nur gefunden wird, wenn der Besucher suchwort1 UND suchwort2 eingegeben hat, die auch vom Benutzer definiert wurden.

      Bei einer oder-verknüpfung würde ich im moment alle User finden, die in Ihren Suchwörtern "hello" oder "world" eingegeben haben, ich will aber nur die user finden, die in als Suchwörter "hello" UND "world" eingegeben haben.

      Kommentar


      • #4
        teste diese Abfrage:
        Code:
        SELECT
           tbl_benutzer.benutzerid,
           s1.benutzerid,
           s2.benutzerid,
           tbl_benutzer.vorname,
           s1.suchbegriff,
           s2.suchbegriff
        FROM
           tbl_benutzer
        LEFT JOIN tbl_suchbegriffe AS s1
           ON ( tbl_benutzer.benutzerid = s1.benutzerid AND s1.suchbegriff = 'hello' )
        LEFT JOIN tbl_suchbegriffe AS s2
           ON ( tbl_benutzer.benutzerid = s2.benutzerid AND s2.suchbegriff = 'welt' )
        WHERE
           s1.suchbegriff IS NOT NULL AND s2.suchbegriff IS NOT NULL
        ~dilemma~

        Kommentar


        • #5
          Hi Dilemman,

          vielen Dank schomal für dein Hilfe, die Abfrage scheint so weit zu funzen !

          Allerdings gibt es noch ein Problem: Der Benutername sollte mit in die Suche einbezogen werden.
          Kannst du mir dabei noch einmal helfen ?
          Ich hab schon versucht deine Abfrage so zu erweitern, habs aber leider nicht hinbekommen.
          Danke schon-und nochmal,
          gruß ben

          Kommentar


          • #6
            teste dieses:
            Code:
            SELECT
               tbl_benutzer.benutzerid,
               tbl_benutzer.nachname,
               tbl_benutzer.vorname,
               s1.benutzerid,
               s2.benutzerid,
               s1.suchbegriff,
               s2.suchbegriff
            FROM
               tbl_benutzer
            LEFT JOIN tbl_suchbegriffe AS s1
               ON ( tbl_benutzer.benutzerid = s1.benutzerid AND s1.suchbegriff = 'hello' )
            LEFT JOIN tbl_suchbegriffe AS s2
               ON ( tbl_benutzer.benutzerid = s2.benutzerid AND s2.suchbegriff = 'welt' )
            WHERE
               (s1.suchbegriff IS NOT NULL AND s2.suchbegriff IS NOT NULL)
               AND
               tbl_benutzer.nachname = '$gesuchterNachname'
            oder auch sdieses:
            Code:
            SELECT
               tbl_benutzer.benutzerid,
               tbl_benutzer.nachname,
               tbl_benutzer.vorname,
               s1.benutzerid,
               s2.benutzerid,
               s1.suchbegriff,
               s2.suchbegriff
            FROM
               tbl_benutzer
            LEFT JOIN tbl_suchbegriffe AS s1
               ON ( tbl_benutzer.benutzerid = s1.benutzerid )
            LEFT JOIN tbl_suchbegriffe AS s2
               ON ( tbl_benutzer.benutzerid = s2.benutzerid )
            WHERE
               s1.suchbegriff  = 'hello'
               AND
               s2.suchbegriff = 'welt'
               AND
               tbl_benutzer.nachname = '$gesuchterNachname'
            ~dilemma~

            Kommentar


            • #7
              Hallo mal wieder

              Die erste Variante von dir habe ich vorher auch schon ausprobiert, leider ohne Erfolg.
              Die 2. geht leider auch nicht :/

              Ich werde mal weiter rumprobieren, vieleicht krieg ich es ja irgendwie hin. Falls du noch eine Idee hast...

              greets,
              ben

              Kommentar


              • #8
                Was heißt:
                ... leider ohne Erfolg.
                ... geht leider auch nicht :/
                ????????
                Was genau hast du ausprobiert, womit (PMA?)hast du es ausprobiert und wie hast du es ausprobiert ???
                Und wie sieht das Ergebnis deiner Tests aus???

                ~dilemma~

                Kommentar


                • #9
                  Ja ich teste die Query in PMA (ich nehm an phpMyAdmin meinst du damit)
                  und gebe sie dort in das SQL-Abfragefeld ein

                  also deine 1. Qurey funktioniert wunderbar:

                  SELECT
                  tbl_benutzer.benutzerid,
                  s1.benutzerid,
                  s2.benutzerid,
                  tbl_benutzer.vorname,
                  s1.suchbegriff,
                  s2.suchbegriff
                  FROM
                  tbl_benutzer
                  LEFT JOIN tbl_suchbegriffe AS s1
                  ON ( tbl_benutzer.benutzerid = s1.benutzerid AND s1.suchbegriff = 'hello' )
                  LEFT JOIN tbl_suchbegriffe AS s2
                  ON ( tbl_benutzer.benutzerid = s2.benutzerid AND s2.suchbegriff = 'welt' )
                  WHERE
                  s1.suchbegriff IS NOT NULL AND s2.suchbegriff IS NOT NULL


                  --> ich bekomme genau die Benutzer, die als suchbegriffe "hello" und "welt" eingebgen haben. (In meiner Testdatenbank ist das im moment genau einer)

                  Nun sollte die Abfrage aber so aussehen, das ein Benutzer der den namen "hello" und als suchbegriff "welt" eingegeben hat, auch gefunden wird, was bei der obigen Query nicht der Fall ist.

                  Daraufhin habe ich die von dir geänderten Querys ausprobiert, die aber leider den Benutzer nicht finden, also in meiner Testdatenbank kein Ergebnis zurückliefern.

                  Kommentar


                  • #10
                    Du musst jetzt (mit dem 'phpMyAdmin') mal ein bißchen rumspielen,
                    zB so:
                    Code:
                    SELECT
                    tbl_benutzer.benutzerid,
                    s1.benutzerid,
                    s2.benutzerid,
                    tbl_benutzer.vorname,
                    s1.suchbegriff,
                    s2.suchbegriff
                    FROM
                    tbl_benutzer
                    LEFT JOIN tbl_suchbegriffe AS s1
                    ON ( tbl_benutzer.benutzerid = s1.benutzerid
                         AND (s1.suchbegriff = 'hello' OR  tbl_benutzer.nachname = 'hello') )
                    LEFT JOIN tbl_suchbegriffe AS s2
                    ON ( tbl_benutzer.benutzerid = s2.benutzerid
                         AND (s2.suchbegriff = 'welt' OR  tbl_benutzer.nachname = 'hello') )
                    ORDER BY
                       tbl_benutzer.benutzerid,
                    ---> OHNE die WHERE-definition,
                    damit du besser erkennen kannst, was 'passiert'.

                    ~dilemma~

                    Kommentar


                    • #11
                      Danke dir, das werde ich tun !
                      ich meld mich wieder

                      Kommentar

                      Lädt...
                      X