Archiv verlassen und diese Seite im Standarddesign anzeigen : Negativ Suchen
fritzje610 28-02-2010, 12:57 Hallo zusammen,
ich habe folgendes Problem:
Es gibt für eine kleine Web-Anwendung die ich für unsren Kegelclub gestrickt habe 12 User. Die User können sich nach einem Login für die entsprechende
Termine als Anwesend oder Abwesend eintragen. Diese Eintragungen werden in einer Tablle gespeichert. Die Spalten sind: id, datum, name und status.
Nun möchte ich, alle Termine finden, an die in der Zukunft liegen und an denen der angemeldete User noch NICHT eingetragen ist.
Diesen Ansatz hatte ich mir überlegt, aber das haut nicht hin.
Könntet ihr mir bitte weiterhelfen ?!?!
Vielen Dank vorab !
$aktdatum = time();
$heuteist = strftime("%Y.%m.%d", $aktdatum);
$query = "SELECT DISTINCT datum FROM kegeln WHERE datum >= '" . mysql_real_escape_string($heuteist) . "'
AND name != '" . mysql_real_escape_string($_SESSION['name']) . "'ORDER BY datum ";
$result = mysql_query($query);
if(!$result)
{
die('Ungültige Abfrage: ' . mysql_error());
}
while($row = mysql_fetch_assoc($result))
{
echo $row['datum'] . "<br />";
}
Das Datumformat in MySQL lautet YYYY-MM-DD und nicht YYYY.MM.DD.
$heute = date('Y-m-d');
AmicaNoctis 28-02-2010, 13:11 Hallo,
sieh dir mal an, wie das Datum in der DB aussieht und lass dir mal ausgeben, was du zu Vergleichszwecken übergibst.
Edit: zu spät.
Gruß,
Amica
fritzje610 28-02-2010, 13:47 Ich habe die Variable
$heuteist = date("Y-m-d");
angepassst. Aber für meinen query bringt das keine Änderung.
Hat deine Spalte datum auch wirklich den Datentyp DATE?
fritzje610 28-02-2010, 15:02 Ja, hat sie.
Siehe Screen-Shot.
Ich würde mal vermuten, dein DB Layout ist murks.
1.) Hast du ne Tabelle, die alle zukünftigen Termine beinhaltet?
2.) Hast du ne Join-Tabelle die die Termine mit den Usern verbindet, wenn diese teilnehmen?
Wenn das alles vorhanden ist, kannst du dir mal unseren Thread zum Thema JOINS ansehen. Da steht ein Beispiel drin, das genau dein Vorhaben beschreibt.
fritzje610 28-02-2010, 21:21 Nein, ich habe nur eine Tabelle, in der die Eintragungen geführt werden.
Diese die in dem Screen-Shot dargestellt ist.
Dies wäre doch dann die Join-Tabelle, in der die User mit dem Termin und dem Status (teilnahme / nicht teilnahme) verbunden werden. Richtig ?!
Die Tabelle mit den Terminen muss dann noch angelegt werden und ich muss mir dann den Thread mit den Joins ansehen.
Ich hoffe, ich versteh das mit den joins und krieg das für mein Problem umgesetzt.
AmicaNoctis 28-02-2010, 21:25 Dies wäre doch dann die Join-Tabelle, in der die User mit dem Termin und dem Status (teilnahme / nicht teilnahme) verbunden werden. Richtig ?!
Nein, das stimmt nicht. Wie gesagt, lies dir das Join-Thema erstmal durch ;)
fritzje610 28-02-2010, 21:41 Hat das was mit Normalisierung zu tun?
AmicaNoctis 28-02-2010, 21:57 Ja
fritzje610 28-02-2010, 22:45 Puh, ich hab mir den Thread durchgelesen, allerdings, muss ich zugeben, nicht allzu viel verstanden bzw. wie krieg ich den Transfer zu meinem Problem nicht hin.
Ich habe die Tabelle mit den Terminen. Darin gibt's zwei Spalten, id und Termin.
So, nun, denke ich, brauche ich noch eine Tabelle mit den Usern, dem entsprechenden Termin und dem Staus (ja/nein). In dieser sind dann die eigentlichen "Nutzdaten" drin. Also, wer wann da oder nicht da ist.
Nur, wie finde ich heraus, wenn ich einen Termin gewählt habe, ob der User zu diesem Termin schon was eingetragen hat.
Mit joins, dass ist mir klar. Nur wie gesagt, krieg ich es nicht vom Beispiel auf den konkreten Fall umgesetzt.
AmicaNoctis 28-02-2010, 23:34 Noch nicht ganz:
Tabelle "termin" (id, start, ende, ...)
Tabelle "user" (id, vorname, name, ...)
Tabelle "anwesenheit" (id, termin_id, user_id, ist_anwesend, ...)
Dann kannst du mit Joins arbeiten.
onemorenerd 01-03-2010, 00:03 Da fehlt ein Leerzeichen vor ORDER.
AmicaNoctis 01-03-2010, 03:15 Da fehlt ein Leerzeichen vor ORDER.
Es sähe zwar besser aus, aber fehlen tut es nicht.
fritzje610 01-03-2010, 12:36 Ok, dass es dann doch drei Tabellen sein müssen dachte ich mir dann so.
Einmal die Basis der User, einmal die Basis der Termine und dann als Schnittmenge dessen die Eintragungen pro Termin.
Allerdings verstehe ich immer noch nicht, wie ich die Abfrage machen muss, um rauszufinden, ob ein bestimmter User für einen bestimmten Termin schon eine Eintragung gemacht hat. Geschweige denn ein INSERT oder UPDATE.
Idee dazu war:
$query = "SELECT termine.".$_GET['termin'].", namen.".$_SESSION['name']." FROM anwesenheit ...........
Leider hört's nach anwesenheit auf. Dann beginnt das oben genannte Verständnisproblem.
fritzje610 01-03-2010, 15:30 Je länger ich darüber nachdenke umso falscher erscheint mir mein Ansatz.
Das gleiche gilt aber auch für den Thread zu den Joins. Je länger ich mir das durchlese umso verwirrter werde ich.
Kann mir jemand einen Weg da raus zeigen ?
|
|