php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.02.2010, 21:58  
Neuer Benutzer
 
Registriert seit: 03.02.2010
Beiträge: 9
PHP-Kenntnisse:
Anfänger
Gimpel befindet sich auf einem aufstrebenden Ast
Standard performante Verknüpfung von Tabellen??

Guten Abend,

ich hoffe das ist nicht zu treist, aber ich brauch dringend Hilfe... ich muss für ein Praktikum eine Datenkank erstellen die alle Informationen zu einer Person enthalten soll die dort arbeitet.. so die DB is fertig nur hab ich ein problem mit der Ausgabe der Daten.

Die Struktor der DB:
Code:
CREATE DATABASE `contactDB` ;

create table person(
personID int not null auto_increment,
lastName varchar(255) not null,
firstName varchar(255) not null,
nick varchar(255),
initials varchar(255) not null,
title varchar(255),    
nationality varchar(255),
photo varchar(255),
birthdate date,
birthplace varchar(255),
firstContact date,
workAs varchar(255),
note text,
primary key (personID)
)ENGINE = INNODB;


create table intern(
internID int not null auto_increment,
employer varchar(255),
workgrp varchar(255),
supervisor varchar(255),
lastDegree varchar(255),
lastDegreeDate date,
lastDegreeWhere varchar(255),
contractBegin date,
contractEnd date,
hoursPerWeek int,
tvl char(4),
primary key (internID),
person_personID int not null,
index (person_personID),
foreign key (person_personID) references person(personID) on delete cascade
)ENGINE = INNODB;


create table student(
studentID int not null auto_increment,
course1 varchar(255),
course2 varchar(255),
matrNo int,
submittionDate date,
defenseDate date,
service varchar(255),
primary key (studentID),
intern_internID int not null,
index (intern_internID),
foreign key (intern_internID) references intern(internID) on delete cascade
)ENGINE = INNODB;


create table address(
addressID int not null auto_increment,
institution varchar(255),
street varchar(255),
streetNo int,
zipcode int,
city varchar(255),
country varchar(255),
primary key (addressID),
person_personID int not null,
index(person_personID),
foreign key (person_personID) references person(personID) on delete cascade
)ENGINE = INNODB;


create table unit(
unitID int not null auto_increment,
unit varchar(255),
primary key (unitID),
address_addressID int not null,
index(address_addressID),
foreign key (address_addressID) references address(addressID) on delete cascade
)ENGINE = INNODB;


create table project(
projectID int not null auto_increment,
projectNo int,
projectTitle varchar(255),
projectShort varchar(255),
thirdPartyDisposer varchar(255),
primary key (projectID)
)ENGINE = INNODB;


create table projectRef(
project_projectID int not null,
person_personID int not null,
index(person_personID, project_projectID),
primary key(project_projectID, person_personID),
foreign key(person_personID) references person(personID) on delete cascade,
foreign key(project_projectID) references project(projectID) on delete cascade
)ENGINE = INNODB;


create table list(
listID int not null auto_increment,
listName varchar(255),
primary key (listID)
)ENGINE = INNODB;


create table listRef(
person_personID int not null,
list_listID int not null,
index(person_personID, list_listID),
primary key(person_personID, list_listID),
foreign key(person_personID) references person(personID) on delete cascade,
foreign key(list_listID) references list(listID) on delete cascade
)ENGINE = INNODB;


create table email(
emailID int not null auto_increment,
email varchar(255),
primary key (emailID),
person_personID int not null,
index(person_personID),
foreign key (person_personID) references person(personID) on delete cascade
)ENGINE = INNODB;


create table phone(
phoneID int not null auto_increment,
phoneNo varchar(255),
primary key (phoneID),
person_personID int not null,
index(person_personID),
foreign key (person_personID) references person(personID) on delete cascade
)ENGINE = INNODB;


create table fax(
faxID int not null auto_increment,
faxNo varchar(255),
primary key (faxID),
person_personID int not null,
index(person_personID),
foreign key (person_personID) references person(personID) on delete cascade
)ENGINE = INNODB;


create table url(
urlID int not null auto_increment,
url varchar(255),
primary key (urlID),
person_personID int not null,
index(person_personID),
foreign key (person_personID) references person(personID) on delete cascade
)ENGINE = INNODB;


create table room(
roomID int not null auto_increment,
room varchar(8),
primary key (roomID),
intern_internID int not null,
index(intern_internID),
foreign key (intern_internID) references intern(internID) on delete cascade
)ENGINE = INNODB;
Es sind 14 Tabellen (wovon 12 zur ausgabe kommen), es gibt aber Personen die nicht Einträge in jeder Tabelle haben, zb gibt es Personen die sind in der intern, student, room und project tabelle stehen oder nur in der Project... aber nur wenn ein Eintrag in der intern Tabelle vorhanden ist kann die person ein Student sein und/oder einen Raum haben ... das sind die Regelungen die eingehalten werden müssen.

Hab es bereits mit Joins versucht (6 Stück - für jeden Fall einen) aber das schießt bei großen Daten den Server ab.

Die Ausgabe sollte eine Tabelle sein die alle Daten zu einer Person anzeigt und die dann leere Zellen ausgibt wenn eine Person gesucht wurde die zb keine einträge in intern hat....
ich brauch "nur" die SQL Abfrage/n ... wie ich das mit PHP ausgabe ist vorerst irrelevant

ich hoffe das ist einigermaßen verständlich...

Gimpel
Gimpel ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 25.02.2010, 22:15  
thomas_w
Gast
 
Beiträge: n/a
Standard

Also im Prinzip fehlen diverse Dinge:

a) Wie sieht eigentlich Deine SQL bisherige Abfrage aus und was soll dabei raus kommen?

b) Abhängig von der SQL Abfrage läßt sich die Verarbeitungsgeschwindigkeit optimieren. Join ist aus jeden Fall der richtige Weg.

c) Es gibt da so einige Fremdschlüssel (Foreign Key). Auf jeden dieser Frendschlüssel sollte ein Index angelegt werden. Dann wird die Abfrage schon mal schneller. Soweit ich sehe, sind diese einfachen Index bereits vorhanden

Code:
index (person_personID),
foreign key (person_personID) references person(personID) on delete cascade
d) Letztlich hängt das Ganze von der Datenmenge ab. Je mehr Daten desto langsam.. Aber auch der Server kann falsch konfiguriert sein.

e) Was bedeutet ...schießt den Server ab..? Vermutlich dauert die Abfrage sehr lange. Führe diese Abfrage doch mal mit EXPLAIN und stelle das Ergebnis hier am Besten als Bild rein.

Code:
EXPLAIN SELECT ...
Grüße... bis morgen
Thomas
  Mit Zitat antworten
Alt 25.02.2010, 22:36  
Neuer Benutzer
 
Registriert seit: 03.02.2010
Beiträge: 9
PHP-Kenntnisse:
Anfänger
Gimpel befindet sich auf einem aufstrebenden Ast
Standard

Danke erstmal,

also meine bisherigen Abfragen (die auch so an sich Funktionieren würden) wären 6 Views die die jeweiliegn Joins enthalten die nötig sind um eine Person je nach gegebenheit (ob intern usw) angezeigt zubekommen.

Code:
/* intern UND student UND project*/
CREATE  ALGORITHM =  UNDEFINED VIEW `person_intern_student_project`   AS
SELECT 	DISTINCT personID AS ID, lastName AS Lastname, firstName AS Firstname, nick AS Nickname, initials AS Initials,
		title AS Title, nationality AS Nationality, birthdate AS Date_of_Birth, birthplace AS Birthplace,
		firstContact AS Firstcontact, workAs AS Jobtitle, note AS Commant, institution AS Institution,
		street AS Street, streetNo AS Streetnumber, zipcode AS Zipcode, city AS City, country AS Country,
		email AS Emailaddress, phoneNo AS Phonenumber, faxNo AS Faxnumber, employer AS Employer,
		workgrp AS Workgroup, supervisor AS Supervisor, lastDegree AS Lastest_Degree, lastDegreeDate AS Latest_Degree_Date,
		lastDegreeWhere AS Latest_Degree_Where, contractBegin AS Begin_of_Contract, contractEnd AS End_of_Contract,
		hoursPerWeek AS Hours_per_Week, tvl AS Salary_level, listName AS List, projectNo AS Projectnumber,
		projectTitle AS Projecttitle, projectShort AS Porjectshortcut, thirdPartyDisposer AS Third_Party_Disposer, room AS Room,
		course1 AS First_Course, course2 AS Second_Course, matrNo AS Matrikelnumber, submittionDate AS Submittingdate,
		defenseDate AS Defensedate, service AS Service, unit AS Unit, url AS Homepage
FROM	person, intern, room, student, projectRef, project,
		listRef, list, url, fax, email, phone, address, unit
WHERE	person.personID = intern.person_personID AND
		room.intern_internID = intern.internID AND
		student.intern_internID = intern.internID AND
		person.personID = projectRef.person_personID AND
		project.projectID = projectRef.project_projectID AND
		person.personID = listRef.person_personID AND
		listRef.list_listID = list.listID AND
		url.person_personID = person.personID AND
		fax.person_personID = person.personID AND
		email.person_personID = person.personID AND
		phone.person_personID = person.personID AND
		address.person_personID = person.personID AND
		address.addressID = unit.address_addressID
order by personID


		

/* intern KEIN student KEIN project*/
CREATE  ALGORITHM =  UNDEFINED VIEW `person_intern_nostudent_noproject`   AS
SELECT 	DISTINCT personID AS ID, lastName AS Lastname, firstName AS Firstname, nick AS Nickname, initials AS Initials,
		title AS Title, nationality AS Nationality, birthdate AS Date_of_Birth, birthplace AS Birthplace,
		firstContact AS Firstcontact, workAs AS Jobtitle, note AS Commant, institution AS Institution,
		street AS Street, streetNo AS Streetnumber, zipcode AS Zipcode, city AS City, country AS Country,
		email AS Emailaddress, phoneNo AS Phonenumber, faxNo AS Faxnumber, listName AS List, employer AS Employer,
		workgrp AS Workgroup, supervisor AS Supervisor, lastDegree AS Lastest_Degree, lastDegreeDate AS Latest_Degree_Date,
		lastDegreeWhere AS Latest_Degree_Where, contractBegin AS Begin_of_Contract, contractEnd AS End_of_Contract,
		hoursPerWeek AS Hours_per_Week, tvl AS Salary_level, room AS Room,
		unit AS Unit, url AS Homepage
FROM 	person, intern, room, listRef, list, url, fax,
		email, phone, address, unit
WHERE 	person.personID = intern.person_personID AND
		room.intern_internID = intern.internID AND
		listRef.list_listID = list.listID AND
		person.personID = listRef.person_personID AND
		url.person_personID = person.personID AND
		fax.person_personID = person.personID AND
		email.person_personID = person.personID AND
		phone.person_personID = person.personID AND
		address.person_personID = person.personID AND
		address.addressID = unit.address_addressID
order by personID

/* intern UND student KEIN project */
CREATE  ALGORITHM =  UNDEFINED VIEW `person_intern_student_noproject`   AS
SELECT 	DISTINCT personID AS ID, lastName AS Lastname, firstName AS Firstname, nick AS Nickname, initials AS Initials,
		title AS Title, nationality AS Nationality, birthdate AS Date_of_Birth, birthplace AS Birthplace,
		firstContact AS Firstcontact, workAs AS Jobtitle, note AS Commant, institution AS Institution,
		street AS Street, streetNo AS Streetnumber, zipcode AS Zipcode, city AS City, country AS Country,
		email AS Emailaddress, phoneNo AS Phonenumber, faxNo AS Faxnumber, listName AS List, employer AS Employer,
		workgrp AS Workgroup, supervisor AS Supervisor, lastDegree AS Lastest_Degree, lastDegreeDate AS Latest_Degree_Date,
		lastDegreeWhere AS Latest_Degree_Where, contractBegin AS Begin_of_Contract, contractEnd AS End_of_Contract,
		hoursPerWeek AS Hours_per_Week, tvl AS Salary_level, room AS Room,
		course1 AS First_Course, course2 AS Second_Course, matrNo AS Matrikelnumber, submittionDate AS Submittingdate,
		defenseDate AS Defensedate, service AS Service, unit AS Unit, url AS Homepage
FROM	person, intern, room, student,
		listRef, list, url, fax, email, phone, address, unit
WHERE	person.personID = intern.person_personID AND
		room.intern_internID = intern.internID AND
		student.intern_internID = intern.internID AND
		listRef.list_listID = list.listID AND
		person.personID = listRef.person_personID AND
		url.person_personID = person.personID AND
		fax.person_personID = person.personID AND
		email.person_personID = person.personID AND
		phone.person_personID = person.personID AND
		address.person_personID = person.personID AND
		address.addressID = unit.address_addressID
order by personID

/* intern KEIN student ABER project */
CREATE  ALGORITHM =  UNDEFINED VIEW `person_intern_nostudent_project`   AS
SELECT 	DISTINCT personID AS ID, lastName AS Lastname, firstName AS Firstname, nick AS Nickname, initials AS Initials,
		title AS Title, nationality AS Nationality, birthdate AS Date_of_Birth, birthplace AS Birthplace,
		firstContact AS Firstcontact, workAs AS Jobtitle, note AS Commant, institution AS Institution,
		street AS Street, streetNo AS Streetnumber, zipcode AS Zipcode, city AS City, country AS Country,
		email AS Emailaddress, phoneNo AS Phonenumber, faxNo AS Faxnumber, listName AS List, employer AS Employer,
		workgrp AS Workgroup, supervisor AS Supervisor, lastDegree AS Lastest_Degree, lastDegreeDate AS Latest_Degree_Date,
		lastDegreeWhere AS Latest_Degree_Where, contractBegin AS Begin_of_Contract, contractEnd AS End_of_Contract,
		hoursPerWeek AS Hours_per_Week, tvl AS Salary_level, projectNo AS Projectnumber,
		projectTitle AS Projecttitle, projectShort AS Porjectshortcut, thirdPartyDisposer AS Third_Party_Disposer, room AS Room,
		unit AS Unit, url AS Homepage
FROM	person, intern, room, projectRef, project,
		listRef, list, url, fax, email, phone, address, unit
WHERE	person.personID = intern.person_personID AND
		room.intern_internID = intern.internID AND
		person.personID = projectRef.person_personID AND
		project.projectID = projectRef.project_projectID AND
		listRef.list_listID = list.listID AND
		person.personID = listRef.person_personID AND
		url.person_personID = person.personID AND
		fax.person_personID = person.personID AND
		email.person_personID = person.personID AND
		phone.person_personID = person.personID AND
		address.person_personID = person.personID AND
		address.addressID = unit.address_addressID
order by personID

/* KEIN intern KEIN student KEIN project*/
CREATE  ALGORITHM =  UNDEFINED VIEW `person_nointern_nostudent_noproject`   AS
SELECT 	DISTINCT personID AS ID, lastName AS Lastname, firstName AS Firstname, nick AS Nickname, initials AS Initials,
		title AS Title, nationality AS Nationality, birthdate AS Date_of_Birth, birthplace AS Birthplace,
		firstContact AS Firstcontact, workAs AS Jobtitle, note AS Commant, institution AS Institution,
		street AS Street, streetNo AS Streetnumber, zipcode AS Zipcode, city AS City, country AS Country,
		email AS Emailaddress, phoneNo AS Phonenumber, faxNo AS Faxnumber, listName AS List, unit AS Unit, url AS Homepage
FROM	person, listRef, list, url, fax, email, phone, address, unit
WHERE	listRef.list_listID = list.listID AND
		person.personID = listRef.person_personID AND
		url.person_personID = person.personID AND
		fax.person_personID = person.personID AND
		email.person_personID = person.personID AND
		phone.person_personID = person.personID AND
		address.person_personID = person.personID AND
		address.addressID = unit.address_addressID
order by personID
		
/* KEIN intern KEIN student ABER project */
CREATE  ALGORITHM =  UNDEFINED VIEW `person_nointern_nostudent_project`   AS
SELECT 	DISTINCT personID AS ID, lastName AS Lastname, firstName AS Firstname, nick AS Nickname, initials AS Initials,
		title AS Title, nationality AS Nationality, birthdate AS Date_of_Birth, birthplace AS Birthplace,
		firstContact AS Firstcontact, workAs AS Jobtitle, note AS Commant, institution AS Institution,
		street AS Street, streetNo AS Streetnumber, zipcode AS Zipcode, city AS City, country AS Country,
		email AS Emailaddress, phoneNo AS Phonenumber, faxNo AS Faxnumber, listName AS List, projectNo AS Projectnumber,
		projectTitle AS Projecttitle, projectShort AS Porjectshortcut, thirdPartyDisposer AS Third_Party_Disposer, 
		unit AS Unit, url AS Homepage
FROM	person, projectRef, project,
		listRef, list, url, fax, email, phone, address, unit
WHERE	person.personID = projectRef.person_personID AND
		project.projectID = projectRef.project_projectID AND
		person.personID = listRef.person_personID AND
		listRef.list_listID = list.listID AND
		url.person_personID = person.personID AND
		fax.person_personID = person.personID AND
		email.person_personID = person.personID AND
		phone.person_personID = person.personID AND
		address.person_personID = person.personID AND
		address.addressID = unit.address_addressID
order by personID
Wie gesagt sollte entweder eine Tabelle in der Ausgabe entstehen die die Ausgabe so darsetllen wie in den Views von mir oder eine Tabelle wo die Zellen die für eine Person die zb nicht intern ist, leer ausgegeben werden, wobei ich denke das 2. Variante einfache ist und erste schöner...

und "schießt den Server ab" soll bedeuten das eine Abfrage (vorallem die die für intern student raum und project gilt) zu lange braucht und ein timeout (nach 60 sec) ensteht... was, denke ich, an der Bildung der Kreuzprodukte der Joins liegt...

Die EXPLAIN - "Bilder" lass ich erstmal weg da das jetzt noch sehr viel Platz wegnehmen würde, zu not Poste ich die noch...

Gimpel
Gimpel ist offline   Mit Zitat antworten
Alt 25.02.2010, 23:39  
Erfahrener Benutzer
 
Registriert seit: 08.10.2009
Beiträge: 681
PHP-Kenntnisse:
Anfänger
Harry_X befindet sich auf einem aufstrebenden Ast
Standard

hast du mal versucht, aus den joins eine neue table zu createn?
Harry_X ist offline   Mit Zitat antworten
Alt 26.02.2010, 08:04  
thomas_w
Gast
 
Beiträge: n/a
Standard

Also die Views bzw. die darunter liegenden SQL-Abfragen sind schon ziemlich gross. Da brauche ich eine Zeit mich einzulesen.

Aber warum verwendest Du den DISTINCT ?
Vermutlich weil sonst "doppelte" Zeilen ermittelt werden. Dies spräche dann für einen fehlenden JOIN zwischen den Tabellen und die zu große Datenmenge, die den Server in die Knie zwingt. DISTINCT ist hierfür der falsche Ansatz, wichtig (aber kompliziert) ist es den fehlenden JOIN zu finden.

EDIT

Um welche Datenbank benutzt Du..(postgreSQL?)

Code:
/* intern UND student UND project*/
CREATE  ALGORITHM =  UNDEFINED VIEW `person_intern_student_project`   AS
Weiterhin gehört meiner Meinung kein ORDER BY in eine View. Das gehört zwar jetzt nicht zu Deiner Frage, aber wäre allgemein zu klären. Soll was sortiert werden, dann soll dies der SQL auf die View regeln.

EDIT2

Du verwendet in den SQL-Abfragen den sogenannten Theta Join Style

Code:
FROM	person, intern, room, student, projectRef, project,
		listRef, list, url, fax, email, phone, address, unit
WHERE	person.personID = intern.person_personID AND
das ist nicht falsch, aber wird bei so komplexen Abfragen schnell unübersichtlich.

Alternativ gibt es den neueren Ansi Join Style (ab SQL '92 Standard) z. B.

Code:
FROM person
 JOIN intern
    ON  person.personID = intern.person_personID 
 JOIN room
    ON room.intern_internID = intern.internID
damit lassen sich die JOIN besser übersehen, ob etwas fehlt.


EDIT3

Also ich finde keinen fehlenden JOIN in der Abfrage, soweit ich das Ganze verstehe. Bleibt für mich die Frage nach dem DISTINCT.


Grüße
Thomas

Geändert von thomas_w (26.02.2010 um 08:39 Uhr). Grund: EDIT, EDIT2, EDIT3
  Mit Zitat antworten
Alt 26.02.2010, 09:23  
Neuer Benutzer
 
Registriert seit: 03.02.2010
Beiträge: 9
PHP-Kenntnisse:
Anfänger
Gimpel befindet sich auf einem aufstrebenden Ast
Standard

Guten Morgen,

ich verwende MySQL über PHPmyadmin...

das DISTINCT nutze ich, bzw dachte ich zu nutzen^^, um, wie du gesagt hast, doppelte Zeilen zu vermeiden...

und es wäre doch theoretisch mögliche eine Abfrage zu schreiben die über alle TAbellen geht und alles anzeigt, zb mit einem FULL OUTER JOIN, den es aber scheinbar leider in MySQL nicht gibt. Diesen müsste man doch mit USING und "Unterabfragen" simulieren oder? und vorallem wäre die Variante nicht performanter oder?

Gimpel
Gimpel ist offline   Mit Zitat antworten
Alt 26.02.2010, 10:12  
thomas_w
Gast
 
Beiträge: n/a
Standard

Ein FULL OUTER JOIN entspricht in etwa dem kartesischen Produkt. Ein SQL ohne JOIN. So wird alles angezeigt, aber es entsteht eine gigantische Ergebnismenge

Code:
SELECT * FROM tabelle1, tabelle2
Theoretisch geht das bestimmt, aber es ist nicht sinnvoll. Eine SQL-Abfrage soll nur die Daten als Ergebnis liefern, die auch benötigt werden.

Ein DISTINCT sollte nicht zwingend notwendig sein, ansonsten liegt ein Design- oder Verständnisfehler vor.

Ich bin mir nicht sicher, ob wir vom selben Reden. Bitte konkrete Fragen mit Beispielen stellen.

Grüße
Thomas
  Mit Zitat antworten
Alt 26.02.2010, 11:07  
Neuer Benutzer
 
Registriert seit: 03.02.2010
Beiträge: 9
PHP-Kenntnisse:
Anfänger
Gimpel befindet sich auf einem aufstrebenden Ast
Standard

Also ein DISTINCT vermeidet soweit ich weis doppelte Zeilen bei der Ausgabe, also Zeilen die durch ein Kreuzprodukt entstehen... ich weis aber nicht ob das nicht eigentlich bereits durch den Join gegeben ist, falls ja wäre natürlich das DESTINCT sinnlos....

und ich brauche eine Abfrage die alle Daten zu einer Person ausgibt und falls die gesuchte Person zb keine Einträge in der intern tabelle hat soll trotzdem im Tabellenheader alle Spalten zu intern auftauchen... nur ebend nicht ausgefüllt.

Ein Beispiel:
Jemand sucht nach "Lastname" Muster, da werden dann zb 2 Personen ausgegeben. Einmal Mustermann der in allen Tabellen einen Eintrag hat und Mustertyp der nur in Person einträge hat.... die Ausgabe sollte dann eine Tabelle sein mit allen Tabellenheadern und bei Mustertyp sind dann leere Zellen wo die Einträge von intern stehen würden...
Gimpel ist offline   Mit Zitat antworten
Alt 26.02.2010, 11:48  
thomas_w
Gast
 
Beiträge: n/a
Standard

Dann fangen wir mal klein an und machen einen LEFT OUTER JOIN zwischen der Tabelle student und intern.

Code:
SELECT s.*, i.*
  FROM student s
  LEFT JOIN intern i
    ON i.internID = s.intern_internID
 WHERE s.studentID = 4711;
Es wird der Student mit der ID 4711 gesucht. Existiert der Student wird er angezeigt, existiert zusätzlich der eintrag in intern, dann wird dieser auch angezeigt, falls "intern" nicht existiert, werden die i.* Spalten mit NULL ausgegeben.

Kommt hier jetzt mehr als eine Ergebniszeile raus?

Wenn dass klappt, kannst Du Dir die fehlenden Tabellen Schritt für Schritt nach dem gleichen Prinzip anhängen.

Grüße
Thomas
  Mit Zitat antworten
Alt 26.02.2010, 12:34  
Neuer Benutzer
 
Registriert seit: 03.02.2010
Beiträge: 9
PHP-Kenntnisse:
Anfänger
Gimpel befindet sich auf einem aufstrebenden Ast
Standard

Danke!

also das Beispiel von dir is super.... ich hab das jetzt mal für alles versucht umzusetzen... aber da wird mir jetzt angekreidet das person_personID in der On-klausel doppeldeutig wäre...
Code:
SELECT 	person.*, address.*, unit.*, email.*, fax.*,
		phone.*, url.*, list.*, listRef.*, project.*, projectRef.*,
		intern.*, student.*, room.*
FROM	person
LEFT JOIN address ON address.person_personID = person.personID
LEFT JOIN unit ON unit.address_addressID = address.addressID AND 
				  address.addressID = person.personID
LEFT JOIN email ON email.person_personID = person.personID
LEFT JOIN fax ON fax.person_personID = person.personID
LEFT JOIN phone ON phone.person_personID = person.personID
LEFT JOIN url ON url.person_personID = person.personID
LEFT JOIN listRef ON listRef.person_personID = person.personID
LEFT JOIN list ON list.listID = listRef.list_listID AND 
						listRef.person_personID = person.personID
LEFT JOIN projectRef ON projectRef.person_personID = person.personID
LEFT JOIN project ON project.projectID = projectRef.project_projectID AND 
					 projectRef.person_personID = person.personID
LEFT JOIN intern ON intern.person_personID = person.personID
LEFT JOIN student ON student.intern_internID = intern.internID AND
					 intern.person_personID = person.personID
LEFT JOIN room ON room.intern_internID = intern.internID AND
				  intern.person_personID = person_personID
EDIT
Sorry hab gard ebend erst den Beitrag von Harry_X gesehn... hab ich ja imprinzip mit den Views gemacht... oder wie meintest du das?

Gimpel

Geändert von Gimpel (26.02.2010 um 12:52 Uhr).
Gimpel ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Mehrer Tabellen aus Datenbank auslesen? Blade JavaScript, Ajax und mehr 5 17.11.2009 16:08
[Erledigt] Mehrere MySQL Tabellen mit PHP abfragen DonMuchacho Datenbanken 7 27.07.2009 19:47
Tabellen miteinander verknüpfen Suzi Datenbanken 12 27.05.2009 11:40
Verknüpfung zweier Tabellen zur Ausgabe klappt nicht Lesnivila PHP Tipps 2009 40 13.03.2009 13:20
in einer abfrage ermitteln ob mehrere tabellen existieren? litterauspirna Datenbanken 7 28.10.2008 19:33
[Erledigt] Limit auf Ergebnissumme mehrerer Tabellen Frank Datenbanken 8 02.09.2008 11:33
Tabellen für Vokabeltrainer anlegen... anonym01 PHP Tipps 2008 9 03.03.2008 21:18
Verknüpfung von Tabellen rene.klatt Datenbanken 12 13.09.2007 18:41
Hilfe bei Verknüpfung von Tabellen FreAkaZoiD Datenbanken 7 13.09.2007 16:01
Tabellen Verknüpfung -> Welches System? snatch-ic Datenbanken 2 03.06.2007 19:48
Verknüpfung 2er DB Tabellen in php! PHP Tipps 2005 39 10.05.2005 13:20
Mysql Abfrage über 2 Tabellen mit Verknüpfung zuner 3. Datenbanken 2 26.10.2004 16:36
[Erledigt] Selectanfrage an eine Datenbank,aber aus mehreren Tabellen Datenbanken 2 26.10.2004 07:23
Join aus 3 Tabellen mit nur einer Verknüpfung? Datenbanken 7 24.09.2004 18:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
innodb tabellen verknüpfen, phpmyadmin tabellenverknüpfungen ondelete, sql abfrage \verknüpfung von tabellen\, mysql performante abfragen, performante sql abfragen, phpmyadmin tabellebenverknüpfungen innodb, innodb mit tabellenverknüpfungen arbeiten, phpmyadmin mysql verknüpfungen innodb verwenden, performantes sql, innodb tabellen verknüpfungen, innodb falsche ausgabe, mysql phpmyadmin tabellenverknüpfungen innodb, mysql verknüpfung cascade, mysql tabellen innodb verknüpfen, verknüpfung mehrerer tabellen über autoincrement, mysql tabellen verknüpfen varchar, verknüpfung cascade, mehrere tabellen verknüpfen innodb, verknüpfung cascade phpmyadmin, mysql anatz tabellen verknüpfen

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:52 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum