 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
19.11.2003, 19:25
|
#1
|
|
TP-Member
Registriert seit: Dec 2001
Ort: Altach
|
Nach Datum ordnen
Hallo!
Ich habe in meiner MySQL Datenbank angenommen 10 Fußballspiele. heim, aus, datum, zeit
3 finden am 22.11, 3 am 23.11 und 4 am 24.11 statt.
Nun möchte ich auf einer Seite den Spielplan ausgeben. Als "Überschrift" soll das Datum ausgegeben werden und darunter die Spiele die an diesem Tag statt finden. Also das Datum soll nur 1(!) mal ausgegeben werden.
Beispiel:
22.11
Bayern - Schalke
Leverkusen - Rostock
Dortmund - 1860
23.11
Bremen - Stuttgart
....
Wie kann ich das am besten realisieren?
mfg
Altacher
|
|
|
20.11.2003, 09:28
|
#2
|
|
TP-Supporter
Registriert seit: Apr 2001
|
Hi
in der SQL kannst Du ja im Order by nach Datum sortieren.
Aber die entspr. Ausgabe, so wie Du es möchtest, ist am einfachsten in Deiner Scriptsprache zu lösen.
Ein Lösungsansatz für deine Schleife:
vorbesetzen Variable varDatum mit ""
dann die Abfrage-Schleife beginnen.
Wenn Datum-Feld ungleich varDatum dann andrucken.
Immer:
Datum-Feld andrucken
varDatum=Datum-Feld
nächster
__________________
Liebe Grüße, die Judi!
|
|
|
20.11.2003, 15:07
|
#3
|
|
TP-Member
Registriert seit: Dec 2001
Ort: Altach
|
Ganz check ichs leider noch nicht!
Was ist wenn ältere Spiele in der Datenbank drin sind? Die sollten dann aber nicht ausgegeben werden.
Was meinst du mit:
vorbesetzen Variable varDatum mit ""
mfg
Altacher
|
|
|
20.11.2003, 15:15
|
#4
|
|
TP-Specialist
Registriert seit: Jan 2002
Ort: TP/Dynamik
|
also ich glaub zu wissen, was judi meint
@altacher:
ältere Spiele filterst du schon bei der SQL abfrage raus.
vorbesetzte Variablen mit '' sind nix anderes als Variablen ohne Inhalt.
__________________
Gehelft? Hier kannst du dich bedanken.
mike
|
|
|
20.11.2003, 15:53
|
#5
|
|
TP-Senior
Registriert seit: Oct 2003
Ort: Papenburg
|
Mit where kannst du dir ja die Spiele eines bestimmten Zeitraumes raussuchen und mit order by dann sortieren.
Wenn du dann die Ergebnisse deiner Abfrage in einer while-Schleife durchgehst nutzt du jeweils am Ende der Schleife eine Variable um das Datum hineinzuschreiben. Beim nächsten Durchlauf überprüfst du dann mit if ob sich das Datum des neuen Datensatzes verändert hat und gibts es ggf. aus.
So würde ich es machen und ich glaube Judi hat es auch so gemeint?
|
|
|
20.11.2003, 16:22
|
#6
|
|
TP-Supporter
Registriert seit: Apr 2001
|
Genauso habe ich es gemeint. Leider hat er sich zu keiner Scriptsprache geäußert, deshalb diese Beschreibung.
Ich hatte gestern selbst kurz das Problem, sowas in php lösen zu müssen. Ich bin zwar nicht der php-Guru aber so hats bei mir funktioniert.
<?php
$testvar = "";
do {
if ($testvar == "" || $testvar != $row_rs ['aDate']){
echo $row_rs['aDate']."<br>";
$testvar = $row_rs['aDate'];
}
echo $row_rs['myText']."<br>";
} while ($row_rs = mysql_fetch_assoc($rs)); ?>
und dies halt eben als ASP-Lösung, wen es interessiert.
<%
dim testvar
testvar = ""
while not rs.eof
if testvar = "" or testvar <> rs("aDate") then
Response.write rs("aDate") & "<br>"
testvar = rs("aDate")
end if
Response.write rs("myText") & "<br>"
rs.movenext
wend
%>
Nachtrag: Wichtig ist, und das wird schnell auch vergessen, dass im SQL-Statement auf jeden Fall eine Sortierung stattfinden muss, also, das order by datum muss Bestandteil sein.
__________________
Liebe Grüße, die Judi!
Geändert von Judi (20.11.2003 um 20:01 Uhr).
|
|
|
21.11.2003, 23:26
|
#7
|
|
TP-Member
Registriert seit: Dec 2001
Ort: Altach
|
Jep, habe vor es in PHP zu programmieren.
Ich denke jetzt bekomme ich es hin!
Danke!
mfg
Altacher
|
|
|
22.11.2003, 16:21
|
#8
|
|
TP-Member
Registriert seit: Dec 2001
Ort: Altach
|
Was bedeutet $row_rs und mysql_fetch_assoc($rs) ?
Diese Schleife muss ich gleich nach der Datenbankabfrage eingeben oder?
|
|
|
22.11.2003, 18:01
|
#9
|
|
TP-Supporter
Registriert seit: Apr 2001
|
wie ich bereits schrieb, ich bin kein php-Experte. Ich beschäftige mich mit php auch erst sein ein paar Tagen.
Einzelne Funktion und mySQL-Syntax müsste ich auch erst im Handbuch nachlesen, um diese zu erklären.
Andere können das hier bestimmt besser.
Manchmal lasse ich mir zu Testzwecken eine DW-Verbindung generieren. Dieser benutzt immer eine fussgesteuerte Schleife. Vorteile - Nachteile jetzt beim Auslesen einer Tabelle kann ich noch nichtmals sagen. Bei der fussgesteuerten Schleife
do {
Anweisungsblock
} while (Bedingung);
muss die Schleife mind. einmal durchlaufen werden, denn nach der letzten Anweisung wird erst die Bedingung überprüft und diese ist lt. Syntax
while($row = mysql_fetch_assoc($rs));
Die kopfgesteuerten Wiederholung (beispiel unten) beginnt mit der Feststellung, ob ein Schleifendurchlauf notwendig ist. Diese Prüfung wird nach jedem Durchlauf wiederholt. Ergibt der Test der Bedingung einen Wert TRUE, wird die Schleife durchlaufen, ergibt sie FALSE, werden die Anweisungen der Schleife übersprungen und die Abarbeitung des Programms wird am Ende der Schleife fortgesetzt. Man möge mich korrigieren, aber so habe ich es verstanden.
Für meine handgeschriebenen Verbindungen nutze ich meist diese einfache Vorlage für eine kopfgesteuerte Schleife und passe sie dann an bzw. frage sie ab, wo es für mich Sinn macht.
PHP-Code:
<?
// Verbindung zur mySQL - Datenbank herstellen
$server = "localhost"; $user = "root"; $pass = "";
$database = "homepage";
$verbindung = @mysql_connect($server,$user,$pass)
or die ("Keine Verbindung möglich");
mysql_select_db($database, $verbindung)
or die ("SQL-Fehler = ".mysql_error());
// Select-Statement zum Auslesen der Daten
$sql = "SELECT aDate, myText from topics order by aDate";
$rs = mysql_query($sql);
// Variable vorbesetzen für die Abfrage des Datenwertes, welcher nur einmal wiederholt werden soll
// auslesen der Datensätze in einer kopfgesteuerten Whileschleife
$testvar = "";
while($row = mysql_fetch_object($rs)) {
// vergleichen des Datenwertes mit dem Wert der Variablen
if ($testvar == "" || $testvar != $row->aDate) {
echo $row->aDate;
echo "<br>";
// Variablen den Wert des Datenfeldes geben
$testvar = $row->aDate;
}
echo $row->myText;
echo "<br>";
}
// alles schließen
mysql_free_result($rs);
mysql_close($verbindung);
?>
__________________
Liebe Grüße, die Judi!
|
|
|
26.11.2003, 23:29
|
#10
|
|
TP-Member
Registriert seit: Dec 2001
Ort: Altach
|
Danke für die vielen Tipps, aber ich versteh jetzt nicht wieso mein Code nit funktioniert!
PHP-Code:
<?php
$heute = date("d.m");
include("dbconnect.php");
$abfrage = "SELECT * FROM spiele2 WHERE datum >= '$heute' ORDER BY datum";
$ergebnis = mysql_query($abfrage);
$testvar = "";
while($row = mysql_fetch_object($ergebnis)) {
if ($testvar == "" || $testvar != $row->datum) {
echo $row->datum;
$testvar = $row->datum;
}
?>
</td>
</tr>
<tr bgcolor="#ffffff">
<td width="16%" class="news">
<?php
echo substr($row->zeit,0,5);?>
</td>
<td width="34%" class="begegnung"><?php echo $row->heim;?></td>
<td width="25%" class="begegnung">- <?php echo $row->aus;?></td>
<td width="25%"><? echo '<a href="tipps.php?heim=', urlencode($row->heim), '&aus=', urlencode($row->aus), '&tippgeber=', urlencode($row->tippgeber),'">'; ?>Klick</td>
</tr>
<?php
}
?>
Es wird das heutige und ein anderes Datum ausgegeben und das gleich hintereinander und unten dran gehängt werden alle Spiele in der Datenbank. Es wird bei einem neuen Datum keine neue Überschrift gemacht! Was liegt der Hacken?
|
|
|
27.11.2003, 00:12
|
#11
|
|
TP-Senior
Registriert seit: Oct 2003
Ort: Papenburg
|
Vor dem von dir geposteten Code wirst du ja irgendwo mal <table><tr><td> stehen haben (oder so ähnlich) dann läufst du in die Schleife rein, das Datum wird ausgegeben und
</td></tr> kommt. Anschließend folgt dann noch eine neue Zeile in der Tabelle wo wohl ein Spiel ausgegeben wird. Der Schleifendurchlauf ist beendet. Als nächstes folgt der nächste Schleifendurchlauf. Als erstes kommt wieder </td></tr> , aber wo sind die öffnenden Tags?
Ich glaube das Datum müsste trotzdem irgendwo ausgegben werden, aber in jedem Fall nicht in der Tabelle.
|
|
|
27.11.2003, 15:52
|
#12
|
|
TP-Member
Registriert seit: Dec 2001
Ort: Altach
|
Ich habe nur aus Platzgründen die öffnenden Tags weggelassen! Funkt aber trotzdem nicht!
|
|
|
27.11.2003, 17:40
|
#13
|
|
TP-Member
Registriert seit: Dec 2001
Ort: Altach
|
Hier nochmal der gesamte Code:
PHP-Code:
<table width="100%" border="0" cellspacing="1" cellpadding="5" bgcolor="#999966">
<tr bgcolor="#ffffff">
<td bgcolor="#FFFFCC" class="ueberschrift" colspan="4">
<?php
$heute = date("d.m");
include("dbconnect.php");
$abfrage = "SELECT * FROM spiele2 WHERE datum >= '$heute' ORDER BY datum";
$ergebnis = mysql_query($abfrage);
$testvar = "";
while($row = mysql_fetch_object($ergebnis)) {
if ($testvar == "" || $testvar != $row->datum) {
echo $row->datum;
$testvar = $row->datum;
}
?>
</td>
</tr>
<tr bgcolor="#ffffff">
<td width="16%" class="news">
<?php
echo substr($row->zeit,0,5);?>
</td>
<td width="34%" class="begegnung"><?php echo $row->heim;?></td>
<td width="25%" class="begegnung">- <?php echo $row->aus;?></td>
<td width="25%"><? echo '<a href="tipps.php?heim=', urlencode($row->heim), '&aus=', urlencode($row->aus), '&tippgeber=', urlencode($row->tippgeber),'">'; ?>Klick</td>
</tr>
<?php
}
?>
</table>
|
|
|
27.11.2003, 17:48
|
#14
|
|
TP-Senior
Registriert seit: Oct 2003
Ort: Papenburg
|
Aber, wenn das der gesamte Code ist, ist es doch so wie ich es meinte. Am Ende der Schleife wird der tr-Tag geschlossen und es geht zum nächsten Schleifendurchlauf. Oben bei while geht es wieder los und es gibt dann wenn das zweite Datum ausgegeben werden soll keinen öffnenden Tag.
Diese beiden Zeilen:
<tr bgcolor="#ffffff">
<td bgcolor="#FFFFCC" class="ueberschrift" colspan="4">
und die beiden:
</td>
</tr>
müssen mit in if rein, vor bzw. nach der Ausgabe des Datums.
Trotz des Tabellenfehlers sollte das Datum irgendwo ausgegeben werden. Schaumal vor, oder nach der Tabelle. Vielleicht stehen dort die Datumsangaben die er jetzt nicht ausgibt.
|
|
|
27.11.2003, 21:54
|
#15
|
|
TP-Member
Registriert seit: Dec 2001
Ort: Altach
|
Aah, jetzt weiß ich was du meintest! :-)
Es funkt so halbwegs, sieht mir noch nicht ganz geheuer aus! ;-)
Weiß noch zufällig jemand wie ich bei ORDER BY die Reihenfolge ändern kann? Also das sie genau umgekehrt abgefragt werden!
mfg
Altacher
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| 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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 05:20 Uhr.
|
 |