php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 09.12.2007, 14:08  
Neuer Benutzer
 
Registriert seit: 09.12.2007
Beiträge: 7
susi85
Standard Ein kleines Join Problem (MySQL)

Hallöchen...

bin MySQL Anfängerin, ich glaube sogar dafür zu blöd zu sein, konnte mich davon aber noch nicht überzeugen lassen... ich kämpfe...

Folgendes Problem:

ich habe 2 Tabellen:

Tabelle1 hat verschiedene Aufgaben, Tabelle 2 die Tage an denen die Aufgaben erledigt wurden:

Tabelle 1:

id:___Aufgabe___Von______Bis
------------------------------------------------
1 Putzen 01.01.2007 30.07.2007
2 Stricken 30.11.2007 01.01.2008
3 Basteln 02.08.2007 14.11.2008
usw.

Tabelle2:

id____ Datum
------------------------
1 4.6.2007
1 5.6.2007
3 7.7.2007
2 8.9.2007
2 9.12.2007 *
usw.

Ich hätte jetzt gerne alle Aufgaben, die z.B. am heutigen Tag geplant sind und die Ausgabe des Datums wenn es zutrifft, dass die Aufgabe am Suchtag erledigt worden sind!!

ich versuche das so:


Select
tabelle1.*,
tabelle2.datum
From
tabelle1 Left Join tabelle2 On tabelle1.id = tabelle2.id
Where
tabelle2.datum = '2007-12-09' And
tabelle1.Von < '2007-12-09' And
tabelle1.Bis > '2007-12-09'

DAS GEEEHHT NICHT!!!

Hätte gerne folgendes Resultat:

id:___Aufgabe___Von______Bis____ Datum
------------------------------------------------
2 Stricken 30.11.2007 01.01.2008 09.12.2007
3 Basteln 02.08.2007 14.11.2008 null

Wo ist mein Denkfehler?? Das mit den verschiedenen JOINS habe ich versucht zu verstehen, left Join müsste doch da am besten passen??

Wäre für jede Hilfe dankbar!!! :wink:

Liebe Grüße,

Susi :wink: [/b]
susi85 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 09.12.2007, 16:21  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo und willkommen hier im Forum

So ganz falsch sieht dein Statement aber garnicht aus.

Ist lm08pflegeplanung Tabelle 1, lm08erledigt Tabelle 2? Laut deiner Struktur kann eine Planung nur 1x pro Tag erledigt werden, richtig? (1:1 Beziehung)

Wähl erstmal alle relevanten Planungen aus:
Code:
SELECT * FROM lm08pflegeplanung WHERE CURDATE() BETWEEN von AND bis
joine jetzt die Ergebnisse passend (..id = ..id) und von heute (CURDATE() Vergleich)
Code:
SELECT *, lm08erledigt.datum
FROM lm08pflegeplanung
LEFT JOIN lm08erledigt 
ON lm08erledigt.id = lm08pflegeplanung.id AND lm08erledigt.datum = CURDATE()
WHERE CURDATE() BETWEEN von AND bis
OK ist eigentlich genau dein SQL-Code hmm. Was klappt denn nicht? Falsches Ergebnis, Syntaxfehler?
Zergling-new ist offline   Mit Zitat antworten
Alt 09.12.2007, 16:50  
Neuer Benutzer
 
Registriert seit: 09.12.2007
Beiträge: 7
susi85
Standard

Hi, Zergling... :wink:

ups, sorry... hab das mal korrigiert mit den tabellen...

Wenn ich ein SuchDatum nehmen würde, das in der Tabelle2 vorhanden ist, DANN würde er den einen passenden Datensatz von Tabelle 1 anzeigen! Aber nun den!! Es sollte aber auch die anderen Daten von tabelle 1 anzeigen, bei dem das suchdatum innerhalb der VON und BIS Daten ist!
Da scheint igrendwas mit dem JOIN nicht zu stimmen... aber Was??

Also auch nach deiner Meinung sollte das funktionieren?? Hmmm....
susi85 ist offline   Mit Zitat antworten
Alt 09.12.2007, 17:02  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Bei SQL-Abfragen kannst du versuchen zu debuggen, in dem du die Bedingung immer weiter erweiterst (sprich rausnimmst).

Wird hier noch das erwartete Ergebnis angezeigt?
Code:
SELECT * FROM lm08pflegeplanung WHERE CURDATE() BETWEEN von AND bis
Und hier:
Code:
SELECT *, lm08erledigt.datum
FROM lm08pflegeplanung
LEFT JOIN lm08erledigt
WHERE CURDATE() BETWEEN von AND bis
LIMIT 30
(ohne JOIN-Bedingung, LIMIT damit unser Ergebnis nicht gesprengt wird)

Wie sehen deine Tabellen wirklich aus? Haben die Datums auch ein DATETIME Format oder nur VARCHAR? Stehen Daten drin? Kannst du mal einen Dummy-Datensatz + Struktur posten?
Zergling-new ist offline   Mit Zitat antworten
Alt 09.12.2007, 17:13  
Neuer Benutzer
 
Registriert seit: 09.12.2007
Beiträge: 7
susi85
Standard

ich mach gleich mal was richtiges! dauert nur ein Moment... und DANKE fürs Helfen...
susi85 ist offline   Mit Zitat antworten
Alt 09.12.2007, 18:02  
Neuer Benutzer
 
Registriert seit: 09.12.2007
Beiträge: 7
susi85
Standard

So... habe auf die Schnelle mal das ganze in echt gemacht:



Bild 1 zeigt Tabelle1

Bild2 zeigt Tabelle2

Bild3 zeigt die Tabellen mit normalem JOIN:

Select
testdb.tabelle1.*,
testdb.tabelle2.Datum
From
testdb.tabelle1 Left Join
testdb.tabelle2 On testdb.tabelle2.idtabelle1 = testdb.tabelle1.idtabelle1


Bild4 zeigt den JOIN mit der von bis Abfrage des SuchDatums:

Select
testdb.tabelle1.*,
testdb.tabelle2.Datum
From
testdb.tabelle1 Left Join
testdb.tabelle2 On testdb.tabelle2.idtabelle1 = testdb.tabelle1.idtabelle1
Where
testdb.tabelle1.von < '2007-12-09' And
testdb.tabelle1.bis > '2007-12-09'

Bild5 zeigt das Problem! Wenn ich jetzt noch die Abfrage des Datums in die Tabelle2 einfüge, kommt nur der eine Datensatz!!

Select
testdb.tabelle1.*,
testdb.tabelle2.Datum
From
testdb.tabelle1 Left Join
testdb.tabelle2 On testdb.tabelle2.idtabelle1 = testdb.tabelle1.idtabelle1
Where
testdb.tabelle2.Datum = '2007-12-09' And
testdb.tabelle1.von < '2007-12-09' And
testdb.tabelle1.bis > '2007-12-09'



Ich hätte es aber gerne so wie auf Bild 6, !!



Hilfe...
susi85 ist offline   Mit Zitat antworten
Alt 09.12.2007, 19:19  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Welchen Datentyp verwendest du für deine Datum-Spalten?

Wenn du Einträge aus tabelle1 mehrfach willst, solltest du tabelle2 als "Basis" (FROM tabelle2) verwenden, dann ihr tabelle-1 INNER JOINen, dessen Datum im WHERE auf den Zeitraum testen. Danach fügst du ein
Code:
SELECT *, IF(tabelle2.datum = CURDATE(), CURDATE(), NULL) AS heute_erledigt
hinzu.

Soetwas:
Code:
SELECT *, IF(tabelle2.datum = CURDATE(), CURDATE(), NULL) AS heute_erledigt
FROM tabelle2
INNER JOIN tabelle2
ON tabelle2.tabelle1_id = tabelle1.id
WHERE CURDATE() BETWEEN von AND bis
Zur Information aber noch: NULL stellt in Datenbanksystemen einen Zustand des Informationsmangels dar, ein "Unbekannt" sozusagen. Die Information ist aber nicht unbekannt, für heute_erledigt würde vielmehr ein BOOL Sinn machen, Ja/Nein.
Zergling-new ist offline   Mit Zitat antworten
Alt 09.12.2007, 19:55  
Neuer Benutzer
 
Registriert seit: 09.12.2007
Beiträge: 7
susi85
Standard

mein Gott.... bin ganz aufgeregt!! Das mit deiner ersten "Query" scheint zu funktionieren!!! (Wie Du merkst, bin ich etwas langsam mit dem Verstehen, aber schnell beim Posten... )

Code:
SELECT *, lm08erledigt.datum 
FROM lm08pflegeplanung 
LEFT JOIN lm08erledigt 
ON lm08erledigt.id = lm08pflegeplanung.id AND lm08erledigt.datum = CURDATE() 
WHERE CURDATE() BETWEEN von AND bis
Aber warum???? Ausser der "Von" "Bis" Abfrage ist doch alles gleich??

Ich muss mir das in Ruhe anschauen und melde mich dann wieder..

Nochmals ein großes DANKESCHÖN !!! :wink:
susi85 ist offline   Mit Zitat antworten
Alt 11.12.2007, 12:03  
Neuer Benutzer
 
Registriert seit: 09.12.2007
Beiträge: 7
susi85
Standard

Hallöchen Zergling...

es funktioniert... aber warum?? Ist die BETWEEN abfrage denn nicht identisch mit <>??

Ich musste nur noch einen DISTINCT hinzufügen und jetzt läuft es wie ein Kätzchen...

Also ich darf Dich offiziell als Lebensretter bezeichnen, denn das hat mich wochen meines Lebens gekostet... DANKE!!
susi85 ist offline   Mit Zitat antworten
Alt 11.12.2007, 13:22  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zumindest schließt du in deinem von-bis Vergleich das von- und bis-Datum selbst mit aus. Vielleicht lags schon daran.
Zergling-new ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
problem mit php 5/mysql 5 rieso PHP Tipps 2006 4 10.06.2006 09:42
MySQL kodierungs problem Mutatos Datenbanken 0 12.05.2006 20:02
MySQL Problem mit INSERT-Queries Arno Nühm Datenbanken 10 07.04.2006 16:46
Serverumzug - Problem mit MySQL Daten [GE]ReeN Datenbanken 6 28.03.2006 17:02
Mysql / Array Problem marcels PHP Tipps 2006 10 23.03.2006 18:30
MySQL Server startet nicht mehr richtig... Datenbanken 16 03.03.2006 19:40
[Erledigt] MYSQL Problem Datenbanken 4 09.02.2006 15:14
Select Problem Datenbanken 17 16.01.2006 21:54
[Erledigt] Problem mit Sonderzeichen PHP -&gt; MySQL -&gt; HTML PHP Tipps 2007 18 07.12.2005 15:23
[Erledigt] Problem beim verbindungsaufbau zum Mysql Server Datenbanken 9 27.10.2005 11:27
[Erledigt] MySQL Abfrage fieses Problem Datenbanken 5 21.07.2005 14:19
Problem mit IIS6 und PHPMyAdmin PHP Tipps 2005-2 4 18.07.2005 21:58
[Erledigt] mysql installations problem Datenbanken 4 16.02.2005 18:46
[Erledigt] Mysql Abfrage Problem! PHP-Fortgeschrittene 5 27.11.2004 10:22
Kleines problem mit ID auto Increment oder so :( PHP Tipps 2004 3 09.06.2004 19:29

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mysql join, mysql join limit, mysql inner join between, mysql join where, mysql join on between, http://www.php.de/datenbanken/45201-ein-kleines-join-problem-mysql.html, mysql between join, g mysql join, left join zeigt sich nicht mysql, g, mysql datum von bis, mysql 2 where bedingungen und join, select left join were curdate(), mysql left join mehrmals auf eine tabelle, join and mysql, php mysql join between, mysql join where and, tabelle mysql mit join vergleichen, curdate vergleich, my sql join aufgaben

Alle Zeitangaben in WEZ +2. Es ist jetzt 07:04 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.