Thomas: m:n Verknüpfung MySQL + PHP

Guten Abend,

Ich möchte folgendes realisieren:

Die Datenbank soll die Verwaltung eines Fußballteams simulieren. Das heißt es gibt eine Tabelle m_personen, eine Tabelle m_Position und eine Tabelle m_Person_Position. Ein Spieler hat entweder noch gar keine Position zugewiesen bekommen oder hat eine/mehrere Positionen. Die Verarbeitung soll in PHP erfolgen.

m_Position
+----------+-----------------------+
| Field    | Type                  |
+----------+-----------------------+
| id       | smallint(10) unsigned |
| position | varchar(100)          |
+----------+-----------------------+

m_personen
+------------+---------------------+
| Field      | Type                |
+------------+---------------------+
| id         | int(10) unsigned    |
| vorname    | varchar(20)         |
| nachname   | varchar(20)         |
+------------+---------------------+

m_Person_Position
+-------------+------------------+
| Field       | Type             |
+-------------+------------------+
| id          | int(10) unsigned |
| person_id   | int(10) unsigned |
| position_id | int(10) unsigned |
+-------------+------------------+

Wenn ich die dann verknüpfe sieht das so aus:

SELECT p.nachname, b.position
FROM m_personen AS p
LEFT JOIN m_Person_Position AS a ON p.id = a.person_id
LEFT JOIN m_Position AS b ON a.position_id = b.id

+------------+---------------------+
| nachname   | position            |
+------------+---------------------+
| Spieler1   | NULL                |
| Spieler2   | Libero      |
| Spieler3   | Stürmer             |
| Spieler3   | Torwart             |
+------------+---------------------+

Jetzt weiß ich aber nicht mehr weiter. Auf der homepage soll das dann so aussehen:

Spieler1: keine Position
Spieler2: Libero
Spieler3: Stürmer, Torwart

Wie kann ich das vernünftig mit PHP auslesen?

MfG

Thomas

  1. Hallo Thomas,

    Was hälst du von einem Array der Art:

      
    array(  
      'Spieler1' => array(),  
      'Spieler2' => array('Libero'),  
      'Spieler3' => array('Stürmer', 'Torwart')  
    )  
    
    

    Der Aufbau ist dann ja problemlos möglich:
    $spieler_array[$spieler_name][] = $spieler_position;

    Grüße
      David

    --
    >>Nobody will ever need more than 640k RAM!<<
    1981 Bill Gates
    1. Hi David,

      das wäre schon praktisch. Nur wie komme ich vom MySQL Resultresource zu solch' einem Array. Habe dazu auch nichts bei Google gefunden. Dort wird immer nur erklärt wie man nen Join macht. Kennt einer ein Tutorial wo gezeigt wird, wie man das mit PHP bewerkstelligen kann?

      MfG

      Thomas

      1. Hallo Thomas,

        das wäre schon praktisch. Nur wie komme ich vom MySQL Resultresource zu solch' einem Array.

        das hat David Dir in seinem Posting doch gezeigt:

        Der Aufbau ist dann ja problemlos möglich:
        $spieler_array[$spieler_name][] = $spieler_position;

        Habe dazu auch nichts bei Google gefunden. Dort wird immer nur erklärt wie man nen Join macht.

        Das ist ja interessant. Hier waren einige der Ansicht, das man genau dazu nicht besonders viel Verständliches findet. Deswegen ist Abhilfe in Arbeit :-)

        Wenn Du Deine Daten ausliest, dann hast Du die Daten in jeder Zeile in etwa in folgender Form:

        $row['nachname'] und $row['position']

        Diese entsprechen in Davids Codeschnipsel den Variablen $spieler_name und $spieler_position. Die Syntax zum Erzeugen von Arrayeinträgen kannst Du im Handbuch nachlesen, falls Du sie so nicht verstehst.

        Freundliche Grüße

        Vinzenz