MySql-Abfragen als Tabelle zwischenspeichern
Andreas-Lindig
- datenbank
Hallo Forum,
ich möchte Ergebnismengen aus MySql-Abfragen als Tabelle zwischenspeichern um mit deren Hilfe weitere Abfragen durchzuführen. In Access kann man die Tabelle einfach speichern, in MySql auch?
Danke und Gruß, Andreas
Hallo Forum,
ich möchte Ergebnismengen aus MySql-Abfragen als Tabelle
zwischenspeichern um mit deren Hilfe weitere Abfragen
durchzuführen. In Access kann man die Tabelle einfach
speichern, in MySql auch?
Danke und Gruß, Andreas
Ja, schau mal nach "SELECT ... INTO". Das gibt's übrigens auch bei Access, ist afaik ANSI.
Ja, schau mal nach "SELECT ... INTO".
INTO?, d.h. ich muß danach einen neuen Tabellennamen nennen oder muß die Tabelle schon vorhanden sein?
Ja, schau mal nach "SELECT ... INTO".
INTO?, d.h. ich muß danach einen neuen Tabellennamen nennen oder muß die Tabelle schon vorhanden sein?
wie ich das sehe geht das nicht: http://de.mysql.com/documentation/mysql/bychapter/manual.de_Deutsch.html#ANSI_diff_SELECT_INTO_TABLE
aber dafür gibt es in MySQL: http://de.mysql.com/documentation/mysql/bychapter/manual.de_Reference.html#INSERT_SELECT
für beides muß die Tabelle bestehen. Kannst die Tabelle aber auch mit SQL anlegen und löschen: http://de.mysql.com/documentation/mysql/bychapter/manual.de_Reference.html#CREATE_TABLE und http://de.mysql.com/documentation/mysql/bychapter/manual.de_Reference.html#DROP_TABLE
bei CREATE TABEL gibt es wie Du siehst "TEMORARY", die mußt Du also nicht löschen. Aber die Frage ist ob Du das wirklich brauchst?! Wofür brauchst Du das genau? Meistens geht das auch ohne temporäre Tabellen!
Grüße
Andreas
Aber die Frage ist ob Du das wirklich brauchst?! Wofür brauchst Du das genau? Meistens geht das auch ohne temporäre Tabellen!
wir hatten das Problem vor 2 Tagen schonmal mit der Inkonsistenzabfrage... jaja, man darf Inkonsistenzen nicht einplanen, ok.
Aber ich habe da ein Beispiel mit dem Fahrradverleih genannt - es ist komplizierter, als ich in Erinnerung hatte:
es gibt eine Tabelle für die Daten der Räder (Marke, Typ, Anschaffungspreis, id usw.)
und eine Tabelle 'Ausleihdaten' (Ausleiher, ausleihdatum, rückgabedatum, Rad-id). In dieser Tabelle stehen auch vorbestellte Räder - z.B. 27.9.2002-29.9.2002.
jetzt kommt jemand und will wissen: "welche Räder sind am 28.9.2002 noch frei?"
Um das rauszufinden kenne ich nur diese Lösung:
1.Abfrage - welche Räder sind in dem Nachfragezeitraum vermietet? - Speichern.
2.Abfrage - zeige alle Räder, die in der Tabelle 'Räder', aber nicht in der temporären Tabelle 'vermietete Räder' stehen.
mit einer einzigen Abfrage (suche alles, was vor dem Suchzeitraum zurückgegeben wurde/wird und alles, was nach dem Suchzeitraum ausgeliehen wird) bekomme ich immer
entweder:
nur alle Räder aus der Verleihtabelle außerhalb des Suchzeitraums (aber nicht diejenigen aus der Räder-Tabelle, die noch nie verliehen wurden)
oder:
alle Datensätze (left join), die nicht in dem Suchzeitraum verliehen sind. d.h. aber, daß ich auch Räder gezeigt kriege, die zwar im Suchzeitraum veliehen sind, aber auch schon mal zu anderen Zeiten verliehen waren oder sein werden.
Ich suche aber nicht Verleihvorgänge, die außerhalb meines Suchzeitraums liegen, sondern freie Räder. Und da kann ich die Inkonsistenz zwischen der temporären Tabelle und der Räder-Tabelle ganz gut nutzen.
So, hoffe du konntest alles grob verstehen ,-)
Gruß, Andreas
Aber die Frage ist ob Du das wirklich brauchst?! Wofür brauchst Du das genau? Meistens geht das auch ohne temporäre Tabellen!
wir hatten das Problem vor 2 Tagen schonmal mit der Inkonsistenzabfrage... jaja, man darf Inkonsistenzen nicht einplanen, ok.
Aber ich habe da ein Beispiel mit dem Fahrradverleih genannt - es ist komplizierter, als ich in Erinnerung hatte:
es gibt eine Tabelle für die Daten der Räder (Marke, Typ, Anschaffungspreis, id usw.)
und eine Tabelle 'Ausleihdaten' (Ausleiher, ausleihdatum, rückgabedatum, Rad-id). In dieser Tabelle stehen auch vorbestellte Räder - z.B. 27.9.2002-29.9.2002.
jetzt kommt jemand und will wissen: "welche Räder sind am 28.9.2002 noch frei?"
SELECT t1.id AS id,
FORM Räder AS t1
LEFT JOIN Ausleihdaten AS t2
ON t1.id = t2.Rad-id
WHERE t2.ausleihdatum > $wunschtermin
OR t2.rückgabedatum < $wunschtermin
GROUP BY t1.id;
Das ist noch nicht ganz fertig, da ich nicht testen kann, und mich nicht gut genug auskenne. So fragst Du nur alle ab, die in der Ausleih-Tabelle stehen, was noch fehlt sind die die noch nicht da drin stehen, aber das geht auch irgendwie, aber das weiß ich jetzt leider nicht so genau, ich weiß aber das es geht. Du müßtest in der Where Bedingung noch die neuen Fahrräder mitnehmen, vielleicht sollte man das mit "HEAVING" kombinieren. Vielleicht hilft schin ein einfaches
"OR ISNULL t2.ausleihdatum", ich weiß es leider nicht.
Vielleicht hilft Dur ja: http://www.little-idiot.de/mysql/mysql-117.html
Grüße
Andreas
jetzt kommt jemand und will wissen: "welche Räder sind am 28.9.2002 noch frei?"
SELECT t1.id AS id,
FORM Räder AS t1
LEFT JOIN Ausleihdaten AS t2
ON t1.id = t2.Rad-id
WHERE t2.ausleihdatum > $wunschtermin
OR t2.rückgabedatum < $wunschtermin
GROUP BY t1.id;
Das ist noch nicht ganz fertig, da ich nicht testen kann, und mich nicht gut genug auskenne. So fragst Du nur alle ab, die in der Ausleih-Tabelle stehen, was noch fehlt sind die die noch nicht da drin stehen...
und nicht nur das: wenn Fahrrad xyz vorher verliehen war und zurückgegeben wurde erscheint es auch, obwohl es zum Wunschtermin schon wieder verplant sein kann.
vielen Dank für Deine Mühe, aber glaub mir: das haben schon mehrere Leute durchgekaut - und sogar unser Master-Brain aus meinem Lehrgang, der wirklich _alles_ konnte (und alles besser als alle Dozenten, abi:1.0 einschließlich Mathe-leistungskurs) ist auf keine andere Lösung gekommen, als die, die ich vorgestellt habe (was zwar nicht heißt daß es die nicht geben kann, aber der Erfahrung mit ihm nach ist es sehr unwahrscheinlich ,-).
also meine Frage an alle bleibt:
kann man Abfrageergebnisse als Tabellen zwischenspeichern? und wie? - die Links zu de.mysql.com konnte ich leider noch nicht auswerten, weil ich hier nur begrenzt internet-Zugang habe und zu hause testen muß, dafür habe ich mir das Manual runtergeladen, konnte es aber leider zuhause nicht öffnen...
tja, für eine einfache Antwort wäre ich dankbar,
Andreas-Lindig
Hi!
SELECT t1.id AS id,
FORM Räder AS t1
LEFT JOIN Ausleihdaten AS t2
ON t1.id = t2.Rad-id
WHERE t2.ausleihdatum > $wunschtermin
OR t2.rückgabedatum < $wunschtermin
GROUP BY t1.id;
Das ist noch nicht ganz fertig, da ich nicht testen kann, und mich nicht gut genug auskenne. So fragst Du nur alle ab, die in der Ausleih-Tabelle stehen, was noch fehlt sind die die noch nicht da drin stehen...
und nicht nur das: wenn Fahrrad xyz vorher verliehen war und zurückgegeben wurde erscheint es auch, obwohl es zum Wunschtermin schon wieder verplant sein kann.
Nein, das nicht, durch group by hast Du nur eine Angabe Pro Rad, und durch die WHERE-bedingung werden bereits alle Datensätze entfernt, die zu dem Zeitpunkt nicht zu Verfügung stehen. Jetzt hast Du alle Räder die schonmal ausgeliehen waren oder für einen anderen zeiptunkt vorgemerkt sind. Was noch feht sind die Räder die noch nie ausgeliehen waren und auch noch nicht vorgemerkt sind. Ich bin 100% isg sicher das irgendwie geht, mußt ein bisschen mit MAX(), WHERE, GROUP BY und HAVING rumspielen, dazu kenne ich mich aber nicht genug aus ohen das testen zu können. Sonst schick mir mal die Dumps der Tabellen dann probiere ich mal ein wenig!
vielen Dank für Deine Mühe, aber glaub mir: das haben schon mehrere Leute durchgekaut - und sogar unser Master-Brain aus meinem Lehrgang, der wirklich _alles_ konnte (und alles besser als alle Dozenten, abi:1.0 einschließlich Mathe-leistungskurs)
hatte ich auch fast ;-)
ist auf keine andere Lösung gekommen, als die, die ich vorgestellt habe (was zwar nicht heißt daß es die nicht geben kann, aber der Erfahrung mit ihm nach ist es sehr unwahrscheinlich ,-).
Ich denk hier im Forum gibt es einige die das wissen, vor allem 2 Damen die darin sehr fähig sind!
also meine Frage an alle bleibt:
kann man Abfrageergebnisse als Tabellen zwischenspeichern? und wie? - die Links zu de.mysql.com konnte ich leider noch nicht auswerten, weil ich hier nur begrenzt internet-Zugang habe und zu hause testen muß, dafür habe ich mir das Manual runtergeladen, konnte es aber leider zuhause nicht öffnen...
1. kann ich das nicht so gut und kurz erklären wie es im Manual steht,
2. habe ich nicht so viel Zeit. Du wirst Dir doch mal kurz ein paar Links angucken können, das ist wirklichgut erklärt udn zumindest das mit den temporären Tabellen sollte damit geklärt sein!
Grüße
Andreas