MySQL: Datensätze einer Tabelle fest miteinander verknüpfen / gruppiert darstellen?

  • Hallo,


    ich habe nun angefangen damit, mich in MySQL einzulesen. Eine einfache Tabelle müsste ich also gerade noch anlegen können ;) Hoffe ich jedenfalls...


    Ich möchte jedenfalls eine kleine einfache Datenbank anlegen, mit Teile-/Artikelnummern, Bezeichnung, etc...


    Doch möchte ich neben der normalen Listenansicht auch eine Ansichtmöglichkeit, bei der bestimmte Nummern/Bezeichnungen gruppiert angezeigt werden. Also nach dem Prinzip "Artikel XYZ, Nummer 123, Preis 123; zusätzlich benötigt: Artikel ABC, Nummer 234, Preis 234 .... ... sowie ... .


    Das heißt, verschiedene Einträge sollen miteinander verknüpft und auch gruppiert darstellbar sein. Funktioniert das irgendwie? Gleichzeitig sollen diejenigen Einträge, die für sich alleine stehen, eben auch ganz normal angezeigt werden.


    Denn für eine stinknormale Tabelle und Listenansicht braucht man ja nichtmal große PHP Kenntnisse, weshalb ich als "PHP Laie" das noch hinbekommen würde. Aber oben genanntes Problem kann ich bislang nicht lösen.

  • Ja ... mit JOINs (INNER JOIN, LEFT JOIN, RIGHT JOIN und Kombinationen aus OUTER und INNER mit LEFT und RIGHT) und dem GROUP BY Befehl kommst du sicherlich ans Ziel.


    Wenn du also die Spalten a, b, c aus der einen Tabelle und die Spalten e, f, g aus der anderen Tabelle haben möchtest und beide tabellen über eine Spalte verknüpfbar sind (bei mir ist das id_artikel) dann würdest du schreiben:


    SELECT tab1.a, tab1.b, tab1.c, tab2.e, tab2.f, tab2.g
    FROM Tabelle1 AS tab1
    INNER JOIN Tabelle2 AS tab2 ON tab1.id_artikel = tab2.id_artikel


    Wenn du jetzt nach Spalte a aus Tabelle1 gruppieren möchtest, schreibst du einfach folgende Anweisung mit dazu (praktisch in den SELECT-Befehl)


    GROUP BY tab1.a


    Wenn du es sortieren willst nach Spalte b:


    ORDER BY tab1.b

    -> Tristan @ Work <-
    --

  • Danke für die Antwort!


    Ich versuche mir das gerade beizubringen, habe jedoch gemerkt, dass es dann auch wieder nicht ganz so einfach ist, wie ich mir das vorgestellt hatte ;) Habe in deinem Code bis jetzt noch nicht viel verstanden, da ich gerade soweit bin, überhaupt mal Datensätze anzeigen zu können ;)


    Gibts da nicht n paar simple Scripte für? ;) Ich hab ja wirklich kaum Ansprüche... ;)

  • Hmm ... sicher wie Sand am Meer. Du wirst aber schnell merken, dass es nicht besonders schwierig ist und dir die Hilfe von mysql.com schon weit bringen wird.


    Am besten kann man es aber immernoch an einem Beispiel zeigen - so ist es jedenfalls bei mir.

    -> Tristan @ Work <-
    --

  • Ja insgesamt scheint es schon relativ simpel zu sein, vorallem für das bißchen was ich damit machen will. Aber wenn man das eben noch nie gemacht hat...


    Was ich aber noch nicht ganz verstehe, wegen der Gruppierung. Du sprichst immer von zwei Tabellen. Aber kann ich denn auch mehrere Datensätze gruppieren, wenn sie in der selben Tabelle stehen?

  • Klar kannst du auch mehrere Spalten in einer Tabelle gruppieren, mit den 2 Spalten bezog sich nur auf die Verknüpfung von Tabellen. Kannst also auch GROUP BY tab1.a, tab1.b etc. machen - eben so wie es für dich Sinn macht.

    -> Tristan @ Work <-
    --

  • Ich kann jetzt immerhin schon die ganze Tabelle Anzeigen lassen, sowie einzelne Datensätze per Formular einfügen. Wie das mit dem Gruppieren funktioniert, bzw. wie ich mir das dann Gruppiert anzeigen lassen kann (und ansonsten nach einem bestimmten Feld sortiert), kann ich aber noch nicht...

  • Ich habe jetzt mal, statt alles anzuzeigen (select * from nummern), versucht das so zu machen: "select * from nummern order by ident", wobei ident eben ein weiteres Datenfeld der Tabelle ist. Ich habe es so gehalten, dass Nummern, die zusammengehören einfach dasselbe ident Feld haben. Jedoch bekomme ich bei der Ausgabe jeweils nicht mehr alle Datensätze angezeigt, sondern nur noch jeweils ein einziges von allen, bei denen ident den gleichen Wert hat.


    Also wenn ich nun bspw. 5 nummern mit dem ident "123" habe und 5 nummern mit ident "234", dann werden jetzt nur noch 2 nummern angezeigt, je eins mit 123 und eins mit 234.


    Edit: Habs jetzt doch ;) hab nicht aufmerksam gelesen vorhin. Aber ich habe noch eine Frage: Kann ich z.B. bei der Ausgabe der Liste irgendwie bewirken, dass z.B. die Zeilen abwechselnd farblich unterlegt sind? Also bswp. jede zweite Zeile mit grauem Hintergrund oder ähnliches? Und dazu noch so, dass gruppierte Elemente (also alle mit demselben ident) aber mit der gleichen Farbe hinterlegt sind??

  • Das ist Gestaltungssache und das machst du im Script, bspw. über eine Variable mit dem Wert 1 den du nach jedem Datensatz negierst (i = -i) und dann beim festlegen der Farbe vergleichst ob der Wert > 0 ist. Das hat aber nichts mit mySQL oder deiner Datenbankabfrage zu tun - da kann dir mySQL nicht helfen ;)

    -> Tristan @ Work <-
    --

  • Ja ich mache ja hier die ganze Zeit im Script herum. Hab schon allerhand "if" Dinger versucht ("if ($nummer=$ident) $farbe=... " in der richtung). Quasi so, dass wenn "Nummer" und "Ident" gleich sind, dies bedeutet, dass die Datensätze zusammengehören. Blöderweise hat nur meine Farbengeschichte nicht geklappt. Er hat dann zwar unterschiedlich eingefärbt, aber komischerweise bestimmte Spalten nicht mehr angezeigt oder ähnliches. Alles Chaos hier ;)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!