CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
20.02.2010, 13:59:51
|
Anfänger
|
|
Registriert seit: Feb 2010
Ort: Hohenstein-Ernstthal
Alter: 43
Beiträge: 5
|
|
SELECT - Aktuellere Daten anzeigen, wenn vorhanden
Guten Tag an das Forum,
ich wende mich an Euch, da ich vor einem Problem stehe welches mich nun bereits seit ca. 1 Woche beschäftigt. Ich hoffe hier eine Antwort/ Lösungsansatz z uerhalten. Meine Kenntnisse in MySQL würde ich als fortgeschrittenen Anfänger :) werten.
Folgende Problemstellung:
Tabelle 1:
-----------------------------------
|id|wert|kriterium1|kriterium2|
-----------------------------------
|1 | 20 |0 |1 |
-----------------------------------
|2 | 20 |1 |0 |
-----------------------------------
|3 | 18 |0 |1 |
-----------------------------------
Tabelle 2:
------------------------------------------
|id|tabelle1_id|gültigvon |gültigbis|
------------------------------------------
|1 |1 |2009-10-01|null |
------------------------------------------
|2 |1 |2010-10-01|null |
------------------------------------------
Ich möchte nun alle Datensätze aus meiner Abfrage, wo jedoch nur die Datensätze aus Tabelle 2 angezeigt werden, welches Datum der Spalte "gültigvon" jünger ist. Sprich nur die Datensätze wo der Datensatz in Tabelle 2 aktueller ist.
Ich hoffe, ihr versteht soweit, was ich damit sagen will. Die Struktur ist zwar noch wesentlich größer und umfangreicher aber das Hauptaugenmerk liegt in der Datumsbegrenzung eines Datensatzes.
Tabelle 1 wird selten bis gar nicht aktualisiert. Tabelle 2 wird minimum 1x pro Monat aktualisiert, für jede Konstelaltion.
|
20.02.2010, 14:07:14
|
|
Administrator
|
|
Registriert seit: Jul 2004
Beiträge: 3.707
|
|
AW: SELECT - Aktuellere Daten anzeigen, wenn vorhanden
Hallo und willkommen hier im Forum.
Was hast Du denn schon selber probiert? Was funktioniert daran nicht?
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert
Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!
Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
|
20.02.2010, 14:10:14
|
Anfänger
|
|
Registriert seit: Feb 2010
Ort: Hohenstein-Ernstthal
Alter: 43
Beiträge: 5
|
|
AW: SELECT - Aktuellere Daten anzeigen, wenn vorhanden
Also aktuell habe ich folgende Abfrage integriert:
SELECT
bla,blubber
FROM bla blubber
LEFT JOIN
bli...
WHERE
IF(gültigbis = null,aktuellesdatum > gültigvon,aktuellesdatum BETWEEN gültigvon AND gültigbis AND aktuellesdatum > gültigvon)
AND bla=blubber...
Ich sollte vielleicht noch erwähnen,daß das gültigvon datum jünger sein muss zum jetzigen datum als es in einem datensatz davor bei der selben konstellation steht.
|
20.02.2010, 14:17:47
|
Anfänger
|
|
Registriert seit: Feb 2010
Ort: Hohenstein-Ernstthal
Alter: 43
Beiträge: 5
|
|
AW: SELECT - Aktuellere Daten anzeigen, wenn vorhanden
Ich stelle Euch mal die gesamte aktuelle SQL Abfrage zur Verfügung:
SELECT SUM(P.wert) AS Pr
FROM matrix as M LEFT JOIN punkte as P ON P.id=M.punkte_id
LEFT JOIN
optionen as O ON O.matrix_id=M.id
LEFT JOIN
daten As T ON T.matrix_id=M.id
WHERE
IF(T.bis = null,'datum' > T.von,'datum BETWEEN T.von AND T.bis)
M.aart_id='1' AND
M.bart_id='2' AND
M.kanal='0' AND
M.original='0' AND
M.ware='0' AND
T.daten_id='17' OR
O.optionen_id IN('26','9') AND
O.aart_id='2'
|
21.02.2010, 21:38:19
|
Anfänger
|
|
Registriert seit: Feb 2010
Ort: Hohenstein-Ernstthal
Alter: 43
Beiträge: 5
|
|
AW: SELECT - Aktuellere Daten anzeigen, wenn vorhanden
Ich habe die Lösung gefunden. Der Ehrlichkeit halber in einem anderen Forum aber ich will Euch gerne teilhaben lassen:
SELECT SUM(P.wert) AS Pr
FROM matrix as M LEFT JOIN punkte as P ON P.id=M.punkte_id
LEFT JOIN
optionen as O ON O.matrix_id=M.id
LEFT JOIN
( SELECT daten.daten_id,MAX(von) GROUP BY von) As T ON T.matrix_id=M.id
WHERE
M.aart_id='1' AND
M.bart_id='2' AND
M.kanal='0' AND
M.original='0' AND
M.ware='0' AND
T.daten_id='17' OR
O.optionen_id IN('26','9') AND
O.aart_id='2'
Das LEFT JOIN Statement mit der MAX Abfrage war ausschlaggebend. Man muss dazu sagen das es ein "negativer" JOIN sit wo eigentlich ein Datensatz keine weiteren Werte enthält aber auf das Ergebnis kommt. Gefunden habe ich das ganze im Forum php-resource auf eine Frage "Maximale Versionsnummer herausfinden". Offizielle Lösung von MySQL 5.0 Reference (Englisch)
Danke trotzdem für alle Leser, Denker.
Geändert von ronronron3005 (21.02.2010 um 21:41:52 Uhr)
Grund: Quellnachweis hinzugefügt
|
21.02.2010, 21:42:56
|
SELFPHP Profi
|
|
Registriert seit: Apr 2008
Alter: 48
Beiträge: 1.938
|
|
AW: SELECT - Aktuellere Daten anzeigen, wenn vorhanden
Zitat:
Zitat von ronronron3005
Ich habe die Lösung gefunden [...] in einem anderen Forum
|
anmerkung: crosspostings werden in foren im allgemeinen als asozial angesehen und entsprechende threads umgehend geschlossen. sei froh, dass es (dieses mal) niemand mitbekommen hat...
[mod: closed]
cx
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 16:58:51 Uhr.
|