phpbar.de logo

Mailinglisten-Archive

Route - war: ellenlang... :-)

Route - war: ellenlang... :-)

Norbert Pfeiffer mysql_(at)_lists.phpcenter.de
Sat, 19 May 2001 04:43:23 +0200


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