MySQL: Mehrere Tabellen auslesen und Ergebnis auswerten

tuFrogs

Mitglied
Hi Leute.

Ich habe mehrere MySQL-Datenbanken mit identischen Spaltennamen.

z.Bsp.:

tabelle_1
jahr, monat, tag, inhalt

tabelle_2
jahr, monat, tag, inhalt

tabelle_3
jahr, monat, tag, inhalt

Nun würde ich gern die Daten dieses Jahres aus allen 3 Tabellen auslesen und die 3 Datensätze die am nächsten an das heutige Datum(aber in der Zukunft liegend) reichen ausgeben. Sollte es dieses Jahr keine 3 Datensätze geben, im nächsten aber schon sollen die Daten des Folgejahres mit einbezogen werden.

Hui, ich hoffe ich konnte mein Vorhaben richtig rüber bringen..:rolleyes:


//EDIT
Joins sind hier nicht angebracht, oder doch?
 
Zuletzt bearbeitet:
UNION wird verwendet, um das Ergebnis einer Anzahl von SELECT-Anweisungen zu einer Ergebnismenge zusammenzufassen.

Ausgewählte Spalten, die an den entsprechenden Positionen jeder SELECT-Anweisung aufgelistet sind, sollten vom selben Typ sein. (So sollte etwa die erste von der ersten Anweisung ausgewählte Spalte denselben Typ haben wie die erste von den anderen Anweisungen gewählte Spalte.) Die in der ersten SELECT-Anweisung verwendeten Spaltennamen werden als Spaltennamen für die zurückgegebenen Ergebnisse benutzt.
http://dev.mysql.com/doc/refman/5.1/de/union.html

Ich glaube, dass ist was Du suchst.
 
Sodele, ich habe mir nun also eine Select-Anweisung zusammengebastelt mit UNION. Nun habe ich noch eine Frage.

Tabelle Termine_1
Name, ..

Tabelle Termine_2
Name, ..

Tabelle Termine_3
Name, ..

Das sind meine 3 Beispieltabellen die ich zusammen auslese und mit Limit die ersten 4 Datensätze ausgebe (nur die Namen). Nun würde ich gern diese 4 Datensätze als Link ausgeben und zwar so ?bla=Termine_1. Also die Variable "bla" soll den Namen der Tabelle aus der der Datensatz stammt bekommen.. Geht das?
 
Ich denke, dass die DB nicht so wirklich optimal aufgebaut ist :suspekt:.
Wenn da nach was zu retten ist, dann mache es lieber jetzt.
Wenn es schon zu spät ist, dann versuche folgendes...
Code:
(select Feld1, FeldN, FeldMax, 'Tabelle1' from tabelle1)
union
(select Feld1, FeldN, FeldMax, 'Tabelle2' from tabelle2)

Nun steht im Ergebnis unter den Feld 'Tabelle1' bei Zeilen der 1. Tabelle 'Tabelle1', das gleiche Feld bei den Zeilen der 2. Tabelle hat dann den Wert 'Tabelle2'.

Ich hoffe, dass hilft weiter.
 
Zuletzt bearbeitet:
Ich hab mir auch schon überlegt die Tabellen zu einer zu machen und die Namen die ich auch für den Link nutzen wollte mit in eine extra Spalte zu speichern. Wenn ich die Datensätze dann archiviere kann ich sie ja wieder getrennt speichern.. Ich probiers mal, denk mal schon das da was zu retten ist ^^

Ich danke dir schon mal..
 
Hallo Blade runner,
ich habe genau den selben Fall und habe Deinen Tipp mal ausprobiert, aber es funktionierte nicht:

Code:
(select Feld1, FeldN, FeldMax, 'Tabelle1' from tabelle1)
union
(select Feld1, FeldN, FeldMax, 'Tabelle2' from tabelle2)

Nun steht im Ergebnis unter den Feld 'Tabelle1' bei Zeilen der 1. Tabelle 'Tabelle1', das gleiche Feld bei den Zeilen der 2. Tabelle hat dann den Wert 'Tabelle2'.
Das habe ich auch nicht verstanden.

Wenn ich jedenfalls ]
Code:
SELECT id, vorname, nachname, strasse, plz, ort, land, 'kunden2005'
             FROM `'kunden2005'` 
UNION 
SELECT  id, vorname, nachname, strasse, plz, ort, land, 'kunden2006'
             FROM `kunden2006` 
             ORDER BY `nachname` , vorname ASC
[/
als mysql-Befehl bei phpmyadmin eingebe, kommt folgende Fehlermeldung:

#1146 - Table 'db_datei.'kunden2005'' doesn't exist :confused:
- was ja auch irgendwo logisch ist, da es die Spalte ja nicht gibt.

Aber wie kann ich später herausfinden, aus welcher Tabelle die Daten stammen?

Übrigens sieht es zwar 'ungut' aus, dass meine Tabellen identische Spalten haben, in diesem Fall muss ich es jedoch wegen einer gewissen Überordnung dabei belassen. Hast aber mit Deiner Skepsis Recht, man muss das schon genau überdenken, ob das Sinn macht...

Danke für Unterstützung! :)
hopsli
 
Hallo Hopsi,
Du hast einen Tippfehler...
Code:
... FROM `'kunden2005'`
sollte aber so sein...
Code:
 FROM `kunden2005`
Da waren Hochkommatas zuviel.



Nun steht im Ergebnis unter den Feld 'Tabelle1' bei Zeilen der 1. Tabelle 'Tabelle1', das gleiche Feld bei den Zeilen der 2. Tabelle hat dann den Wert 'Tabelle2'.
Das heisst, das Du nun eine Spalte Namens 'Kunden2005' hast. Wenn die Daten aus der Tabelle kunden2006 kommen, steht in dieser Spalte Kunden2006. Der Name der Spalte bleibt aber Kunden2005. Ist ein wenig unglücklich das zu erklären. Schau es Dir am besten mit einen SQL-Editor an.
 
Zuletzt bearbeitet:
Also ich habs so gemacht wie es Blade Runner geschrieben hat, da ich einfach keine Zeit mehr habe die Tabellen und meine Skripte umzuschreiben.. Muss noch die Daten einfügen und das wird ne Weile dauern. Wie bereits erwähnt, nicht die feine Lösung, aber eine funktionierende.

Meine SQL-Anweisung:
PHP:
	$sql =	'
				( SELECT Jahr, Monat, Tag, Name, ID, "BEACH" FROM Termine_BEACH		WHERE Jahr >= ' .$year. ' AND Monat >= ' .$month. ' )
					UNION
				( SELECT Jahr, Monat, Tag, Name, ID, "HOUSE" FROM Termine_HOUSE		WHERE Jahr >= ' .$year. ' AND Monat >= ' .$month. ' )
					UNION
				( SELECT Jahr, Monat, Tag, Name, ID, "LUMPEN" FROM Termine_LUMPEN		WHERE Jahr >= ' .$year. ' AND Monat >= ' .$month. ' )
					UNION
				( SELECT Jahr, Monat, Tag, Name, ID, "SONSTIGE" FROM Termine_SONSTIGE	WHERE Jahr >= ' .$year. ' AND Monat >= ' .$month. ' )
					UNION
				( SELECT Jahr, Monat, Tag, Name, ID, "ZUFA" FROM Termine_ZUFA		WHERE Jahr >= ' .$year. ' AND Monat >= ' .$month. ' )
					ORDER BY Jahr ASC, Monat ASC, Tag ASC LIMIT 4
			';

Und hier der Link:
PHP:
<a href="?site=' .$row['BEACH']. '&page=events">

Funktioniert!
 
Zurück