Kai: Query gesucht

Hi,

etwas Grundsätzliches:

Tabelle Namen

ID|Name
--------------
1 |Klaus
--------------
2 |Tom
--------------
3 |Susi
--------------

Tabelle Kinder

ID|Kids  |Alter
---------------
1 |Pete  |10
---------------
1 |Frank |15
---------------
1 |Nick  |18
---------------
3 |Linda |9
---------------
3 |Alex  |12
---------------

Aufgabe: Liste alle Namen und deren zugehörige Kinder mit Alter auf.

Ergebnismenge und deren Formatierung:

1 Klaus
1 Pete 10
1 Frank 15
1 Nick 18
2 Tom
3 Susi
3 Linda 9
3 Alex 12

Gibt es hierzu eine Query, die das generieren kann oder braucht man hier auf jeden Fall eine weitere "Sprache", die dann diese Ausgabe vornimmt?

Gruß, Kai

  1. Moin,

    Aufgabe: Liste alle Namen und deren zugehörige Kinder mit Alter auf.

    SELECT Namen.ID, Namen.Name, Kinder.Kids, Kinder.Alter FROM Namen LEFT JOIN Kinder ON Namen.ID = Kinder.ID

    (ungetestet)

    Grüße Marco

    1. Moin,

      SELECT Namen.ID, Namen.Name, Kinder.Kids, Kinder.Alter FROM Namen LEFT JOIN Kinder ON Namen.ID = Kinder.ID

      Das bringt natürlich nicht die gewünschte Formatierung (wer lesen kann ist klar im Vorteil). So wie du es beschreibst, bin ich der Meinung, dass es wirklich nicht ohne eine Programmiersprache bzw. Stored Procedures geht. Eine einfache Query wird IMHO nicht zum Ergebnis führen.

      Grüße Marco

      1. Das bringt natürlich nicht die gewünschte Formatierung (wer lesen kann ist klar im Vorteil). So wie du es beschreibst, bin ich der Meinung, dass es wirklich nicht ohne eine Programmiersprache bzw. Stored Procedures geht. Eine einfache Query wird IMHO nicht zum Ergebnis führen.

        Das ist eben genau die Frage. Ich habe schon soviel in mysql gelernt und gesehen, was ich nicht vermutet hatt (unter anderem auch in der Ausgabe der Daten-die ist durchaus beeinflussbar!), dass ich nicht verwundert wäre, wenn einer der Superprofis hier doch noch ne Lösung präsentiert.

        Kai

  2. Tach!

    Aufgabe: Liste alle Namen und deren zugehörige Kinder mit Alter auf.

    Das geht so nicht, weil du je nach Fall (Name vs. Kind) unterschiedliche Datensätze haben möchtest. Du kannst nur eine einheitliche Ergebnismenge erzeugen.

    Du könntest nun überlegen, ob du das Alter-Feld generell hinzunimmst und es beim Namen eben NULL ist. Das wäre dann auch dein Unterscheidungsmerkmal zwischen den beiden Fällen. Das Konzept geht aber so nicht mehr auf, wenn du noch mehr unterschiedliche Felder abragen möchtest.

    dedlfix.

  3. hai Kai,

    Gibt es hierzu eine Query, die das generieren kann oder braucht man hier auf jeden Fall eine weitere "Sprache", die dann diese Ausgabe vornimmt?

    Nicht nur der Formatierung wegen. Wenn die Ausgabe gepuffert werden kann, ist es sogar von Vorteil, anstelle eines Join die Sub-Daten über ein prepared Statement abzurufen und mit einer Callback-Funktion auszugeben.

    Hotti

  4. Hi,

    etwas Grundsätzliches:

    ich hätte auch eine "grundsätzliche" Anmerkung!
    Das Feld "id" in der Tabelle "Namen" -> OK!
    Das Feld "id" in der Tabelle "Kinder" -> Unsinn!

    Warum?
    In der Namenstabelle, die ich allerdings "Eltern" nennen würde, ist die "id" eindeutig bzw. leicht verständig. Aber in der Tabelle der Kinder absolut nicht, denn sie drückt eher eine Referenz auf die Eltern aus. Insofern würde ich diese Spalte auf id_namen oder namen-id o.s.ä. benennen.
    Das versteht man sofort ohne Erklärung und Du selbst auch noch in 3 Jahren!

    Gruß Pitter

    Tabelle Namen

    ID|Name

    1 |Klaus

    2 |Tom

    3 |Susi

    Tabelle Kinder

    ID|Kids  |Alter

    1 |Pete  |10

    1 |Frank |15

    1 |Nick  |18

    3 |Linda |9

    3 |Alex  |12

    1. hi,

      ich hätte auch eine "grundsätzliche" Anmerkung!
      Das Feld "id" in der Tabelle "Namen" -> OK!
      Das Feld "id" in der Tabelle "Kinder" -> Unsinn!

      Sehe ich nicht so dogmatisch. Vielmehr kann bei gleichen Feldnamen die Schreibweise eines etwaigen Joins mit using(id) vereinfacht werden.

      Problematisch ist eher der Feldname 'Alter' ;)

      Hotti