Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Problem: verbinden von zwei Select Befehlen

Ich habe zwei Tabellen mit folgendem Aufbau:
Tabelle "main" mit den Spalten (id,f1,f2,text1)
Tabelle "felder" mit den Spalten (id,inhalt)

in den Spalten f1 und f2 stehen die ids aus der Tabelle felder.

Wie kann ich die zwei Tabellen verknüpfen mit MySQL?

Bei einem Microsoft SQL Server funktioniert folgende Abfrage:

Zitat:
SELECT id, f1, text1, (
SELECT inhalt
FROM felder
WHERE felder.id = main.f1
) AS xx
FROM main
schon einmal vielen Dank für eure Bemühungen und Antworten.
Hier gehts zum Orginal Eintrag "Problem: verbinden von zwei Select Befehlen" im Forum

Antworten

Dafür wurden die Verbunde geschaffen ;)

Eigentlich ist es so vorgesehen, dass der Primärschlüssel aus einer Tabelle, der ein Fremdschlüssel in der anderen ist (hier f1) den selben Namen Tragen. In dem Fall z.B. felder_id und main_id als Primärschlüssel der beiden Tabellen. Dann sähe die Abfrage so aus, wenn du alle werte, die zusammen gehören auslesen möchstest.

Code:                   In Zwischenablage kopieren (nur IE)
1">

Alternative dann

Code:                   In Zwischenablage kopieren (nur IE)
2">

Sind beides innere Verbunde nur die erste Möglichkeit funktioniert nicht bei allen Datenbanken da dort alle gleichen Felder verglichen werden.


2.

danke für deine Antwort.

Das wichtigste bzw. das schwierigst habe ich noch nicht erwähnt.
in der Tabelle main gibt es noch eine Spalte f2 welche wieder mit der id der Tabelle felder verbunden ist. Dafür habe ich noch keine geeignete Abfrage gefunden.

Bitte helft die ehre von MySQL zu retten, den der MS SQL kann es und er beherscht auch views, welche beim MySQL erst in Version 5 kommen.


3.

Darf ich mal fragn, welchen Sinn es hat die id einer Tabelle 2 mal in einer anderen zu speichern?


4.

die zweite Tabelle könnte eine Mitarbeitertabelle sein, wo der Name, Personalien usw. gespeichert sind. in der main tabelle könnten z.B. projekte stehen und jedes Projekt bekommt einen Chef und einen stv. welchen man aus der Personalientabelle auslesen kann.
Die gleiche Frage ist aber auch, wie macht mann es wenn man drei Tabellen hat und in der main Tabelle nur die id steht für einen Eintrag in einer anderen Tabelle und man den Wert direkt von der unteren Tabelle möchte und nicht noch einen weiteren SQL Befehl auslösen möchte um herauszufinden was hinter der id von der main tabelle steht.


5.

Das ganze ist eine Frage des Designs.

Hier ein Beispiel.

Tabelle1 : rang
rang_id rang
1 Chef
2 stv,

Tabelle2 : personal
personal_id rang_id personal_name ..... etc
1 1 Peter
2 1 Hans
3 2 Hubert

Tabelle3 : projekt
projekt_id personal_id projekt_name
1 2 projekt1
2 1 projekt2

Die 3 Tabellen sind also miteinander verknüpft und wenn man nun ausgeben möchte, welches Projekt von welchem Mitarbeiter geleitet wird und wie der rang dazu aussieht schreibt man diese Abfrage

Code:                   In Zwischenablage kopieren (nur IE)
3">

Oder die Alternative

Code:                   In Zwischenablage kopieren (nur IE)
4">

Es besteht also kein Grund eine ID mehrmals in einer Tabelle abzulegen.

In meinem Beispiel geht es jedoch nur um Projektleiter. Sprich jedem Projekt wird ein Projektleiter zugewiesen, der einen bestimmten Rang hat. Wenn das ganze nun so handhaben willst, das jedem Projekt beliebig viele mitarbeiter zugewisen werden sollen, dann muss die Tabellen Struktur auf eine m:n Beziehung umgeändert und die JOIN Abfragen dahingehend geändert werden.

Ich hoffe das hilft ;)


6.

mit drei Tabellen bringe ich es jetzt auch hin. Danke!

wie sieht es denn mit zwei aus?

tabelle1: main
id; text; chef; stv;

tabelle2: personal
personal_id; Vorname; Name;

Wie sieht es jetzt bei diesem Beispiel aus? Wenn in den Spalten chef und stv je eine personal_id steht?


7.

Also soll die Situation folgende sein

In der Tabelle Main wird also etwas abgelegt ein Projekt oder eine Abteilung oder was auch immer, was genau einen Chef und genau einen Stellvertreter hat, welche auch in der Tabelle Personal stehen?


8.

Ich habe es nun auch mit nur zwei Tabellen geschaft.
Es wird einfach je ein Chef und ein Stv. aus der Personalien Tabelle zugeortnet.

Zitat:
SELECT text, a.vorname, b.vorname
FROM main
INNER JOIN personal a ON (main.chef = a.id)
INNER JOIN personal b ON (main.stv = b.id)




Hier gehts zum Orginal Eintrag "Problem: verbinden von zwei Select Befehlen" im Forum
 
phpforum.de | Impressum