Norbert: mySQL: zweidimensionale Abfrage

Beitrag lesen

Hallo,

das war mir alles zu unkonkret, also habe ich mal ein praktisches Beispiel gebastelt:

[lang code=sql]CREATE TABLE mx_name (
  id     int(11) NOT NULL auto_increment,  # id-Name
  name   varchar(11) NOT NULL default '',  # Name
  PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE mx_status (
  sid    int(11) NOT NULL auto_increment,  # id-Status
  status varchar(11) NOT NULL default '',  # Status
  PRIMARY KEY (sid)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

CREATE TABLE mx_matrix (
  idV  int(11) NOT NULL default 0,       # id-horizontal
  idH  int(11) NOT NULL default 0,       # id-vertikal
  idS  int(11) NOT NULL default 0,       # id-Status
  UNIQUE (idV,idH)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO mx_name VALUES
 (1, 'Agnes'), (2, 'Bernd'), (3, 'Claus'),
 (4, 'Dörte'), (5, 'Emil'), (6, 'Frank');

INSERT INTO mx_status VALUES
 (1, 'verheiratet'), (2, 'geschieden'), (3, 'verfeindet'),
 (4, 'Geschwister'), (5, 'verlobt'), (6, 'verliebt');

INSERT INTO mx_matrix VALUES
 (1, 2, 2), (2, 3, 4), (3, 4, 6),
 (4, 5, 1), (5, 6, 3), (6, 1, 5);

SELECT b.name, c.name, d.status
     FROM mx_matrix AS a
LEFT JOIN mx_name   AS b ON a.idH = b.id
LEFT JOIN mx_name   AS c ON a.idV = c.id
LEFT JOIN mx_status AS d ON a.idS = d.sid;

erzeugt:

+-------+-------+-------------+
| name  | name  | status      |
+-------+-------+-------------+
| Bernd | Agnes | geschieden  |
| Claus | Bernd | Geschwister |
| D÷rte | Claus | verliebt    |
| Emil  | D÷rte | verheiratet |
| Frank | Emil  | verfeindet  |
| Agnes | Frank | verlobt     |
+-------+-------+-------------+
6 rows in set (0.00 sec)[/code]

Das kannst Du jetzt nach belieben aufbohren ...
HTH

Gruss und Dank
Norbert