Announcement

Collapse
No announcement yet.

1 Select - 3 Tables

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

  • 1 Select - 3 Tables

    Hallo!

    Ich bin leider noch nicht 100%ig Fit in Bezug auf SQL-Syntax und stehe gerade vor einem Problem. Ich würde gerne mit einem SELECT 3 Tabellen Abfragen. Die Tabellen sehen vereinfach so aus:
    Tabelle:
    MEMBER (Beinhaltet alle Mitglieder)
    Id, Name

    Tabelle:
    SPORT (Beinhaltet alle möglichen Sportarten)
    Id, Sportart

    Tabelle:
    MEMBER2SPORT (Beinhaltet wer welche Sportart betreibt, ein Mitglied kann mehrere Sportarten ausüben)
    Id, Id_Member, Id_Sport

    Ich möchte einen Member abfragen und als weitere Spalten im Resultat die Sportarten stehen haben die er betreibt. Ist das überhaupt möglich?

    Oder gibt es einen einfacheren Weg? Die 3 Tabellen habe deswegen gewählt damit möglichst viel flexibel bleibt...

    Wäre für Hilfe sehr dankbar!!

    LG
    Mike

  • #2
    Hallo Mike
    das geht dann so:

    select Name,Sportart
    from MEMBER,SPORT,MEMBER2SPORT
    where MEMBER.Id=MEMBER2SPORT.Id_Member
    and SPORT.Id=MEMBER2SPORT.Id_Sport

    kann dann noch sortiert werden:

    order by Name,Sportart

    viel Spaß
    Lothar

    Comment


    • #3
      Hi,

      danke für die Antwort. So etwas ähnliches habe ich schon versucht, nur dann bekomme ich als Resultat:
      Name Sportart
      Mattulik Anderes
      Mattulik Inline
      Surmtaler Anderes
      Surmtaler BMX
      Surmtaler Inline

      Erwarten würde ich aber nur einen Datensatz pro Name mit zusätzlichen Spalten in denen die Sportart steht. Oder kann man obiges Ergebnis weiter vereinfachen? Auf jeden Fall sind diese redundanten Auflistungen noch ein Hindernis für mich.

      Comment


      • #4
        Wieviele Einträge gibt es maximal pro Name?
        Wenn sich die Anzahl sich im Rahmen hält könnte man es mit limitierten Subselects oder Joins hinbekommen

        Comment


        • #5
          Hallo,

          zu erwarten sind 1.000 bis 10.000 Namen (wobei 10.000 eher optimistisch ist und wahrscheinlich nicht in absehbarer Zeit erreicht wird). Die Performance ist nicht besonders wichtig da nie ein SELECT ohne LIMIT auf die Namen erfolgen wird, außer bei einem Export und der geht erstens schnell und wird selten gebraucht. Hast du mit Subselect eine Idee?

          LG
          Mike

          Comment


          • #6
            Hallo FlipFlop,
            Originally posted by FlipFlop View Post
            ...Erwarten würde ich aber nur einen Datensatz pro Name mit zusätzlichen Spalten in denen die Sportart steht. ...
            Dann ist dein Tabellenmodell falsch! Wenn die Sportarten in SPALTEN gelistet werden sollen, dann mußt du diese auch als Spalten anlegen, was natürlich relationaler Unsinn ist und die Anzahl von vornherein einschränckt.

            Was du möchtest ist doch nur eine Frage der Darstellung - ich würde dies also über das Frontend lösen und nicht von SQL machen lassen.

            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
              Da hast du recht. Normalerweise würde ich das auch so lösen (und werde ich vermutlich auch...), aber da ich es bei dieser Aufgabe mit PEAR:ata_Grid zu tun habe wäre es einfach schön gewesen eine Abfrage zu gestalten die mir dann die Tabelle bastelt. Sprich ich wollte dem Data_Grid eine SQL-Query (mehr kann er nicht, wie auch...) zukommen lassen und der Rest funktioniert quasi von selbst. Aber wie du schon richtig gesagt hast, es ist wohl eine Darstellungssache und vermutlich verlange ich zu viel von der Abfrage. Werde auf eine andere DataSource beim Data_Grid umsteigen und statt der SQL-Query ein Array vorbereiten (das kann ich ja dann gemütlich selbst mit 2 oder 3 Queries herrichten).
              Schade, aber was soll's - Finger spitzen und los :-)

              Danke an alle die hier geholfen haben!

              LG
              Mike

              Comment

              Working...
              X