PHP rocks! wünscht allen Mitgliedern einen guten Rutsch ins neue Jahr 2017 !!!
Hinweis: Das Forum zieht um! Um keine Datenverluste zu haben, schalten wir zwecks Übernahme der Daten das Forum am Sonntag, den 24.04.2016 um ca. 21:00 Uhr offline und passen anschliessend die DNS-Einträge an.
www.php-rocks.de wird euch dann nach den Aktualisierungen der DNS-Server wieder wie gewohnt uneingeschränkt zur Verfügung stehen.
Danke für euer Verständnis!

Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Maximalwerte aus drei verschiedenen Tabellen über View
#1
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
Antworten
#2
Ich hatte vergessen, die Spalten als Index zu definieren.
Jetzt geht's natürlich reibungslos.
Antworten
#3
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
Antworten
#4
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!
Antworten


Gehe zu: