Mailinglisten-Archive |
Hi Michael, > Falls Du ein besseres Datenmodell hast, wäre ich dankbar schaun mer mal... Die ganze Sache fand ich 'hoch interessant' ... :-) Deshalb habe ich mir ein Beispiel gebastelt und damit etwas rumgespielt... Die Abfrage ist natuerlich noch nicht optimiert, das kann ein richtiger Experte machen... Hier die Create-Statements fuer das Beispiel: CREATE TABLE fahrer ( fahr_ID int(11) NOT NULL auto_increment, fahrerName varchar(55) NOT NULL default '', PRIMARY KEY (fahr_ID) ) TYPE=MyISAM; INSERT INTO fahrer VALUES (1,'Anton'); INSERT INTO fahrer VALUES (2,'Bernd'); INSERT INTO fahrer VALUES (3,'Chris'); INSERT INTO fahrer VALUES (4,'Dieter'); INSERT INTO fahrer VALUES (5,'Erich'); CREATE TABLE orte ( orts_ID int(11) NOT NULL auto_increment, ortsName varchar(55) NOT NULL default '', PRIMARY KEY (orts_ID) ) TYPE=MyISAM; INSERT INTO orte VALUES (1,'Berlin'); INSERT INTO orte VALUES (2,'Hannover'); INSERT INTO orte VALUES (3,'Hamburg'); INSERT INTO orte VALUES (4,'Bremen'); INSERT INTO orte VALUES (5,'Potsdam'); INSERT INTO orte VALUES (6,'Brandenburg'); INSERT INTO orte VALUES (7,'Braunschweig'); CREATE TABLE routen ( rout_ID int(11) NOT NULL auto_increment, fahr_ID int(11) NOT NULL default '0', PRIMARY KEY (rout_ID) ) TYPE=MyISAM; INSERT INTO routen VALUES (1,1); INSERT INTO routen VALUES (2,3); INSERT INTO routen VALUES (3,5); CREATE TABLE stationen ( rout_ID int(11) NOT NULL default '0', orts_ID int(11) NOT NULL default '0' ) TYPE=MyISAM; INSERT INTO stationen VALUES (1,1); INSERT INTO stationen VALUES (1,3); INSERT INTO stationen VALUES (1,5); INSERT INTO stationen VALUES (1,7); INSERT INTO stationen VALUES (2,2); INSERT INTO stationen VALUES (2,4); INSERT INTO stationen VALUES (2,6); INSERT INTO stationen VALUES (3,3); INSERT INTO stationen VALUES (3,4); INSERT INTO stationen VALUES (3,5); INSERT INTO stationen VALUES (3,6); Alle gespeicherten Routen zeigt diese Abfrage: SELECT O.ortsName, R.rout_ID, F.fahrerName FROM orte O, fahrer F, routen R, stationen S WHERE R.rout_ID = S.rout_ID AND O.orts_ID = S.orts_ID AND R.fahr_ID = F.fahr_ID; Die Kreuzungspunkte sind etwas aufwendiger: SELECT OE.ortsName, F1.fahrerName, F2.fahrerName, S1.rout_ID, S2.rout_ID FROM orte as OE, routen as R1, routen as R2, fahrer as F1, fahrer as F2, stationen as S1, stationen as S2 WHERE S1.orts_id = S2.orts_id AND S1.rout_id != S2.rout_id AND S1.rout_id > S2.rout_id AND S1.rout_ID = R1.rout_ID AND S1.orts_ID = OE.orts_ID AND F1.fahr_ID = R1.fahr_ID AND S2.rout_ID = R2.rout_ID AND S2.orts_ID = OE.orts_ID AND F2.fahr_ID = R2.fahr_ID ORDER BY OE.ortsName; So, nun bin ich mal gespannt, was unsere Experten zu dem Laienwerk sagen... m.b.G. Norbert ______________________ normal: 02292-681769 notfall: 0177-2363368 ---------------------- e.o.m. --- *** Weitere Infos zur Mailingliste und MySQL unter http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive