Announcement

Collapse
No announcement yet.

Was mache ich falsch?

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

  • Was mache ich falsch?

    Was ich möchte ist die Auswahl eines Mitarbeiters der mehrere fähigkeiten besitzt, aber die Problematik besteht darin dass mann mehrere Fähigkeiten haben kann. Und die Logik des Auswahls ist mit UND verknüpft, dass heisst wenn eine fähigkeit ausgewählt wurde und danach noch eins wird nach einen Mitarbeiter gesucht der die erste Fähigtkeit und die 2 besitztt.

    Danke vorraus!!

    Code:
    SELECT 
       A."Title" AS Title 
       , A."Firstname" AS Firstname 
       , A."Name" AS Name 
       , A."Email" AS Email 
       , A."Phone" AS Phone 
       , A."Fax" AS Fax 
       , A."Company" AS Company 
       , A."City" AS City 
       , A."Zip" AS Zip 
       , MS."SkillgroupItem" AS SkillgroupItem 
    FROM "AxUsers" A 
    
    INNER JOIN "MuMEmployeeSkills" MES ON A.AxID = MES.UserID
    INNER JOIN "MuMEmployeeSkills" AS MES2 ON A.AxID = MES2.UserID 
    INNER JOIN "MuMSkill" MS ON MES.skillid = MS.ID AND MES2.skillID = MS.ID 
    
    WHERE (MES.SkillID = 5) AND (MES2.SkillID = 51)

  • #2
    Ich hoffe ich hab alles richtig Verstanden, wenn ja:

    Benutzer OR

    Comment


    • #3
      du meinst ich soll OR benutzen?

      Comment


      • #4
        denke das OR gehört anstatt dem AND hier hin

        INNER JOIN "MuMSkill" MS ON MES.skillid = MS.ID AND MES2.skillID = MS.ID

        Comment


        • #5
          Bitte erstmal einen Aussagekräftigen Threadtitel wählen (mit dem editieren button)
          Danach bitte noch das konkrete Problem formulieren.

          Und dann evtl. meine Antwort benutzen, wenn ich das Problem richtig verstanden hab

          [highlight=sql]
          SELECT
          A."Title" AS Title
          , A."Firstname" AS Firstname
          , A."Name" AS Name
          , A."Email" AS Email
          , A."Phone" AS Phone
          , A."Fax" AS Fax
          , A."Company" AS Company
          , A."City" AS City
          , A."Zip" AS Zip
          , MS."SkillgroupItem" AS SkillgroupItem1
          , MS2."SkillgroupItem" AS SkillgroupItem2
          FROM "AxUsers" A

          INNER JOIN "MuMEmployeeSkills" MES ON A.AxID = MES.UserID
          INNER JOIN "MuMEmployeeSkills" AS MES2 ON A.AxID = MES2.UserID
          INNER JOIN "MuMSkill" MS ON MES.skillid = MS.ID
          INNER JOIN "MuMSkill" MS2 ON MES2.skillID = MS2.ID
          WHERE (MES.SkillID = 5) AND (MES2.SkillID = 51)
          [/highlight]

          Ich denke so ist es korrekt. Bei der Lösung von ebis solltest Du (sofern ich das im Kopf richtig nachvollziehen kann) jede Zeile 2 mal bekommen.

          Comment


          • #6
            Hallo,

            OR alleine ist nicht die Lösung! Er hat explizit gesagt das der Mitarbeiter über BEIDE Eigenschaften verfügen muß.

            Der doppelte JOIN ist auch suboptimal. Was machst du wenn zwei, drei oder mehr Skills gesucht werden? Die Tabelle zwei, drei oder n-mal joinen?

            Wenn man auf die Anzeige von MS."SkillgroupItem" verzichten kann, dann so:
            [highlight=sql]
            SELECT A."Title" AS Title
            , A."Firstname" AS Firstname
            , A."Name" AS Name
            , A."Email" AS Email
            , A."Phone" AS Phone
            , A."Fax" AS Fax
            , A."Company" AS Company
            , A."City" AS City
            , A."Zip" AS Zip
            FROM "AxUsers" A
            INNER JOIN "MuMEmployeeSkills" MES ON MES.UserID = A.AxID
            WHERE MES.SkillID IN (5, 51)
            group by A."Title" AS Title
            , A."Firstname" AS Firstname
            , A."Name" AS Name
            , A."Email" AS Email
            , A."Phone" AS Phone
            , A."Fax" AS Fax
            , A."Company" AS Company
            , A."City" AS City
            , A."Zip" AS Zip
            having count(distinct MES.SkillID) = 2
            [/highlight]
            Ansonsten muß man das noch in Subselect verpacken.

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Das heißt wenn mehrere Fähigkeiten geklickt werden müssen die als or hinzugefügt werden!?

              Comment


              • #8
                Beschreib doch mal bitte dein Problem so, dass man sich auch was drunter vorstellen kann. Hier hat keiner eine Ahnung wie Dein Programm aussieht und wie da wo wer wie rumklickt.

                Comment


                • #9
                  Sorry hatte deine Antwort vorher nicht gelesen als ich meine zweite Frage stellte.


                  Das ganze ist eine Matrix bestehend aus checkboxen, wenn eine Fähigkeit geklickt wird geht eine Anfrage an die Datenbank, beim 2 Klick wie die zweite Fahigkeit als AND angehängt!
                  Das heißt das er über beide Fähigkeiten verfügen muss.


                  Aber Falk du hast volkommen recht mit deiner Frage: was passieren soll wenn mehrere Fähigkeiten angeklickt werden.

                  Mit deiner Losung bleibt das ganze flexibel!
                  In der tat Mann kann auf skillgroupitem verzichten denn diese dient nur zur Anzeige der ausgewählten Fähigkeit! Diese muss nicht mehr angezeigt werden da der Anwender beim auswählen weißt was er sucht!

                  Comment


                  • #10
                    Hat super geklappt dein Beispiel Falk, danke euch Jungs!

                    Comment

                    Working...
                    X