PHP Rocks
Maximalwerte aus drei verschiedenen Tabellen über View - Druckversion

+- PHP Rocks (https://www.php-rocks.de)
+-- Forum: Datenbanken (https://www.php-rocks.de/https://www.php-rocks.de/forum/6-datenbanken.html)
+--- Forum: MySQL (https://www.php-rocks.de/https://www.php-rocks.de/forum/7-mysql.html)
+--- Thema: Maximalwerte aus drei verschiedenen Tabellen über View (/https://www.php-rocks.de/thema/72-maximalwerte-aus-drei-verschiedenen-tabellen-ueber-view.html)



Maximalwerte aus drei verschiedenen Tabellen über View - Arne Drews - 12.09.2015

Hallo,

Ich stehe leider grad ein wenig auf dem Schlauch.
Ich habe 3 Tabellen, die als einzige Gemeinsamkeit eine bestimmte Spalte enthalten.

Es geht dabei um CSV-Importe, wobei ich anhand der filemtime entscheide, ob die CSV neu ist und in die DB importiert werden soll.
LOAD DATA fällt hier leider aus, da die CSV noch überarbeitet werden muß, bevor sie importiert wird.

Es handelt sich um 3 CSV Dateien und sinniger Weise auch um 3 zugehörige Tabellen.
Nun möchte ich zwecks Entscheidung, ob importiert werden soll, zunächst aus jeder Tabelle die aktuellste filemtime haben.

Generell liefert mir das bereits mein gewünschtes Ergebnis:
Code:
SELECT
   MAX(table1.filemtime) as table1,
   MAX(table2.filemtime) as table2,
   MAX(table3.filemtime) as table3

FROM
   table1,
   table2,
   table3
Allerdings weigert er sich, dies in einer View umzusetzen! Erstelle ich eine View mit dieser Query, erhalte ich nach Abfrage dieser View für alle drei Spalten den DB-Wert NULL.

Kann es sein, daß ich in Views nicht aggregieren darf?
Wäre mir zwar neu, aber wundern würd's mich nicht.


EDIT:
Habe es gerade nochmal als View erstellt, nun kommen zwar die korrekten Ergebnisse, aber die Abfrage dauert ca. 5 Sekunden.
Geht das besser?

Für Tipps und Infos, bin ich dankbar.

Gruß Arne


RE: Maximalwerte aus drei verschiedenen Tabellen über View - Arne Drews - 12.09.2015

Ich hatte vergessen, die Spalten als Index zu definieren.
Jetzt geht's natürlich reibungslos.


RE: Maximalwerte aus drei verschiedenen Tabellen über View - erc - 16.10.2015

Die nicht existenten Indizies sind nicht der direkt Grund dafür. Du bildest mit der Abfrage ein kartesisches Produkt. (Tabelle 1 * Tabelle 2 * Tabelle 3.) Durch die Indizes ist die Datenbank in der Lage die Daten direkt aus den Indizes zu zeihen und muss diese joins nicht auszuführen.

Ohne Indizes müsste der Query so aussehen:

Code:
SELECT
   (SELECT MAX(table1.filemtime) FROM table1) as table1,
   (SELECT MAX(table2.filemtime) FROM table2) as table2,
   (SELECT MAX(table2.filemtime) FROM table2) as table3



RE: Maximalwerte aus drei verschiedenen Tabellen über View - Arne Drews - 16.10.2015

Danke für den Hinweis!
Ich halte Indizes für die bessere Wahl, aber die von Dir vorgestellte Variante probiere ich zum Eigenverständnis auf jeden Fall aus!

Danke!