Discussion:
Kann man mit MySQL Zeilen vergleichen?
(zu alt für eine Antwort)
Dirk Lehmann
2005-04-14 12:10:42 UTC
Permalink
Hallo,

ich habe folgendes Problem:
Ich möchte in einer Tabelle alle Zeilen in einer Spalte (DATETIME)
miteinander vergleichen, und zwar nach foldendem Schema:
- gibt es für Datum (X) ein Datum in einer anderen Zeile (Y), für das gilt:
Y=X+1
-wenn Ja: mache nichts
- wenn Nein: Dann liefere mir X zurück *(und das nächst größere Datem,
was gefunden wird [Das ist aber nicht so wichtig])*

Beispiel:
id time
1 '2005-04-01 ...'
2 '2005-04-01 ...'
3 '2005-04-02 ...'
4 '2005-04-04 ...'
5 '2005-04-13 ...'

Soll nach Abfrage zurück geben:
3 '2005-04-02 ...' *(4 '2005-04-04 ...')*
4 '2005-04-04 ...' *(5 '2005-04-13 ...')*

Ich bin für jede Hilfe dankbar.
CU Dirk.

PS: Ich hab keine Rechte um temporäre Tabellen zu erstellen!
Harald Fuchs
2005-04-14 12:59:46 UTC
Permalink
Post by Dirk Lehmann
Hallo,
Ich möchte in einer Tabelle alle Zeilen in einer Spalte (DATETIME)
Y=X+1
-wenn Ja: mache nichts
- wenn Nein: Dann liefere mir X zurück *(und das nächst größere Datem,
was gefunden wird [Das ist aber nicht so wichtig])*
id time
1 '2005-04-01 ...'
2 '2005-04-01 ...'
3 '2005-04-02 ...'
4 '2005-04-04 ...'
5 '2005-04-13 ...'
3 '2005-04-02 ...' *(4 '2005-04-04 ...')*
4 '2005-04-04 ...' *(5 '2005-04-13 ...')*
Probier doch sowas wie

SELECT t1.id, t1.time, t2.id, t2.time
FROM tbl t1
JOIN tbl t2 ON t2.time > t1.time + INTERVAL 1 DAY
LEFT JOIN tbl t3 ON t1.time < t3.time AND t3.time < t2.time
WHERE t3.id IS NULL
Dirk Lehmann
2005-04-14 13:30:39 UTC
Permalink
Post by Harald Fuchs
SELECT t1.id, t1.time, t2.id, t2.time
FROM tbl t1
JOIN tbl t2 ON t2.time > t1.time + INTERVAL 1 DAY
LEFT JOIN tbl t3 ON t1.time < t3.time AND t3.time < t2.time
WHERE t3.id IS NULL
Naja,

das Problem ist, dass es sich nur um eine Tabelle handelt und ein JOIN von
einer Tabelle in sich selber geht nicht (soweit meine SQL Kenntnisse
reichen). Ich habe mir mehr sowas vorgestellt, wie z.B., dass man erstmal
ein GROUP BY `time` (setzt natürlich voraus, dass time ein DATE ist) macht
und dann irgendwie überprüft, welche Daten nicht vorhanden sind (Und genau
da ist der Haken). Clientseitig kann ich diese Operation nicht durchführen,
da es zu viele Datensätze sind.

Trozdem THX
CU Dirk.
Nico Haase
2005-04-14 13:43:19 UTC
Permalink
Hallöchen,
Post by Dirk Lehmann
das Problem ist, dass es sich nur um eine Tabelle handelt und ein JOIN von
einer Tabelle in sich selber geht nicht (soweit meine SQL Kenntnisse
reichen).
Versuchs doch mal ;)
mfg
Nico
--
www.buchtips.net - Rezensionen online
Dirk Lehmann
2005-04-14 13:57:21 UTC
Permalink
Post by Nico Haase
Post by Dirk Lehmann
das Problem ist, dass es sich nur um eine Tabelle handelt und ein JOIN von
einer Tabelle in sich selber geht nicht (soweit meine SQL Kenntnisse
reichen).
Versuchs doch mal ;)
mysql_error() leifert: #1146 - Table '*(DB)*.tbl' doesn't exist
*(DB)* - Ersetzt (war der Datenbank-Name)

Falls dir das was hilft: MySQL-Version: 4.0.12
ausgeführt mit phpMyAdmin Verison: 2.6.1-pl3

Keine Ahnung, um ehrlich zu sein, ich verstehe die Abfrage auch nicht so
wirklich, was sind denn t1, t2 ... etc??
Christian Kirsch
2005-04-14 14:18:59 UTC
Permalink
Post by Dirk Lehmann
Post by Nico Haase
Post by Dirk Lehmann
das Problem ist, dass es sich nur um eine Tabelle handelt und ein JOIN
von
Post by Nico Haase
Post by Dirk Lehmann
einer Tabelle in sich selber geht nicht (soweit meine SQL Kenntnisse
reichen).
Versuchs doch mal ;)
mysql_error() leifert: #1146 - Table '*(DB)*.tbl' doesn't exist
*(DB)* - Ersetzt (war der Datenbank-Name)
Falls dir das was hilft: MySQL-Version: 4.0.12
ausgeführt mit phpMyAdmin Verison: 2.6.1-pl3
Keine Ahnung, um ehrlich zu sein, ich verstehe die Abfrage auch nicht so
wirklich, was sind denn t1, t2 ... etc??
Das ist jetzt nicht Dein Ernst. Du fragst hier nach, bekommst die Lösung
auf dem Silbertablett serviert und bist dann nicht mal in der Lage oder
bereit, die minimale gedankliche Anstrengung zu investieren, einen
TABELLENNAMEN korrekt einzusetzen? Du kannst in einem relativ simplen
SQL-Statement keine Table Aliase erkennen? Warum willst Du dann
überhaupt mit MySQL spielen?
Dirk Lehmann
2005-04-14 14:32:27 UTC
Permalink
Post by Christian Kirsch
Post by Dirk Lehmann
Post by Nico Haase
Post by Dirk Lehmann
das Problem ist, dass es sich nur um eine Tabelle handelt und ein JOIN
von
Post by Nico Haase
Post by Dirk Lehmann
einer Tabelle in sich selber geht nicht (soweit meine SQL Kenntnisse
reichen).
Versuchs doch mal ;)
mysql_error() leifert: #1146 - Table '*(DB)*.tbl' doesn't exist
*(DB)* - Ersetzt (war der Datenbank-Name)
Falls dir das was hilft: MySQL-Version: 4.0.12
ausgeführt mit phpMyAdmin Verison: 2.6.1-pl3
Keine Ahnung, um ehrlich zu sein, ich verstehe die Abfrage auch nicht so
wirklich, was sind denn t1, t2 ... etc??
Das ist jetzt nicht Dein Ernst. Du fragst hier nach, bekommst die Lösung
auf dem Silbertablett serviert und bist dann nicht mal in der Lage oder
bereit, die minimale gedankliche Anstrengung zu investieren, einen
TABELLENNAMEN korrekt einzusetzen? Du kannst in einem relativ simplen
SQL-Statement keine Table Aliase erkennen? Warum willst Du dann
überhaupt mit MySQL spielen?
Die hab ich ersetzt. Ich hab es auch mit "AS" dazwischen versucht, wobei
dabei ein Timeout kommt. Ich weiß auch, dass jetzt als nächstes kommt, dass
ich dann die Indizies überprüfen soll oder nach deiner Ausdrucksart, dass
ich zu dumm bin diese zu setzen!

Eigentlich ist ja das Usenet dafür da, dass sich, wie der Name schon sagt,
sich User gegenseitig helfen können. Das hat diese Newsgroup eindeutig
verfehlt und ich glaube nicht, dass ich diese in irgendeiner Art
weiterempfehlen würde!

CU Dirk.
Christian Kirsch
2005-04-14 14:59:02 UTC
Permalink
Post by Dirk Lehmann
Post by Christian Kirsch
Post by Dirk Lehmann
Keine Ahnung, um ehrlich zu sein, ich verstehe die Abfrage auch nicht so
wirklich, was sind denn t1, t2 ... etc??
Das ist jetzt nicht Dein Ernst. Du fragst hier nach, bekommst die Lösung
auf dem Silbertablett serviert und bist dann nicht mal in der Lage oder
bereit, die minimale gedankliche Anstrengung zu investieren, einen
TABELLENNAMEN korrekt einzusetzen? Du kannst in einem relativ simplen
SQL-Statement keine Table Aliase erkennen? Warum willst Du dann
überhaupt mit MySQL spielen?
Die hab ich ersetzt.
Die von Dir zitierte Fehlermeldung lässt anderes vermuten.
Post by Dirk Lehmann
Ich hab es auch mit "AS" dazwischen versucht, wobei
dabei ein Timeout kommt.
Beim Ersetzen? Dann würde ich den Editor wechseln.
Post by Dirk Lehmann
Ich weiß auch, dass jetzt als nächstes kommt, dass
ich dann die Indizies überprüfen soll oder nach deiner Ausdrucksart, dass
ich zu dumm bin diese zu setzen!
Ich würde das nicht für völlig ausgeschlossen halten. Warum also
definierst Du keine Indizes? Damit Deine Prophezeiung wahr werden kann?
Post by Dirk Lehmann
Eigentlich ist ja das Usenet dafür da, dass sich, wie der Name schon sagt,
sich User gegenseitig helfen können. Das hat diese Newsgroup eindeutig
verfehlt und ich glaube nicht, dass ich diese in irgendeiner Art
weiterempfehlen würde!
Das bleibt Dir unbenommen. Zur Erinnerung: Du hast hier eine Frage
gestellt. Du hast daraufhin eine Antwort bekommen. Deren Korrektheit
hast Du erstmal bezweifelt. Dann hast Du *nach Aufforderung* die Lösung
wenigstens ausprobiert. Die Fehlermeldung deutet darauf hin, dass Du
beim Umsetzen der Lösung etwas flasch gemacht hast.

Und jetzt beschwerst *Du* Dich, dass *Deine* Probleme hier nicht gelöst
werden?

Ja, bitte geh woanders spielen.
Fabian Schladitz
2005-04-15 07:03:21 UTC
Permalink
Post by Harald Fuchs
SELECT t1.id, t1.time, t2.id, t2.time
FROM tbl t1
JOIN tbl t2 ON t2.time > t1.time + INTERVAL 1 DAY
LEFT JOIN tbl t3 ON t1.time < t3.time AND t3.time < t2.time
WHERE t3.id IS NULL
mysql_error() leifert: #1146 - Table '*(DB)*.tbl' doesn't exist
*(DB)* - Ersetzt (war der Datenbank-Name)
Keine Ahnung, um ehrlich zu sein, ich verstehe die Abfrage auch nicht so
wirklich, was sind denn t1, t2 ... etc??
Soooo... dann bin ich mal freundlich. Kannst du uns _bitte_ das Query
posten, welches du abgesetzt hast und uns verraten, wie deine Tabelle
denn nun heißt?

Dankesehr!

SCNR
--
Fabian
Christian Kirsch
2005-04-14 13:58:47 UTC
Permalink
Post by Dirk Lehmann
Post by Harald Fuchs
SELECT t1.id, t1.time, t2.id, t2.time
FROM tbl t1
JOIN tbl t2 ON t2.time > t1.time + INTERVAL 1 DAY
LEFT JOIN tbl t3 ON t1.time < t3.time AND t3.time < t2.time
WHERE t3.id IS NULL
Naja,
das Problem ist, dass es sich nur um eine Tabelle handelt und ein JOIN von
einer Tabelle in sich selber geht nicht (soweit meine SQL Kenntnisse
reichen).
Dann reichen Deine SQL-Kenntnisse nicht weit genug. Warum probierst Du
es nicht aus, bevor Du "geht nicht" rufst?
Dirk Lehmann
2005-04-14 14:11:16 UTC
Permalink
Post by Christian Kirsch
Post by Dirk Lehmann
Post by Harald Fuchs
SELECT t1.id, t1.time, t2.id, t2.time
FROM tbl t1
JOIN tbl t2 ON t2.time > t1.time + INTERVAL 1 DAY
LEFT JOIN tbl t3 ON t1.time < t3.time AND t3.time < t2.time
WHERE t3.id IS NULL
Naja,
das Problem ist, dass es sich nur um eine Tabelle handelt und ein JOIN von
einer Tabelle in sich selber geht nicht (soweit meine SQL Kenntnisse
reichen).
Dann reichen Deine SQL-Kenntnisse nicht weit genug.
Hab ich auch nicht behauptet...
Post by Christian Kirsch
Warum probierst Du
es nicht aus, bevor Du "geht nicht" rufst?
Hab ich...
Loading...