Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
warum sortiert er nicht? [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
warum sortiert er nicht?


 
friedemann
09-10-2002, 09:28 
 
<?php

$dbserver = "localhost";
$dbname = "";
$dbuser = "";
$dbpass = "";

$connect = mysql_connect($dbserver, $dbuser, $dbpass);
mysql_select_db($dbname, $connect);

$result = mysql_query("SELECT *, UNIX_TIMESTAMP(datum) as termin FROM almuth ORDER BY datum DESC");

if($result)
{
echo "<table width='1000' cellspacing='1'>\n";
while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td bgcolor='#006633'>" . strftime("%d.%m.%Y",$row[termin]) . "</td><td bgcolor='#006633'>" . $row[titel] . "</td><td bgcolor='#006633'>" . $row[zeit] . "</td><td bgcolor='#006633'>" . $row[genre] . "</td><td bgcolor='#006633'>" . $row[kontakt] . "</td>";
echo "</tr>\n";
}
echo "</table>\n";
mysql_free_result($result);
}

?>

Warum gibt er die Einträge nicht nach dem Datum was man eingibt aus? Also das aktuellste oben, und wenn ein Tag vorbei ist dann das nächste aktuellste oben?

Meine Daten oben dbuser und so habe ich mit Absicht rausgenommen.

 
Wotan
09-10-2002, 09:37 
 
Original geschrieben von friedemann
<?php

$dbserver = "localhost";
$dbname = "";
$dbuser = "";
$dbpass = "";

$connect = mysql_connect($dbserver, $dbuser, $dbpass);
mysql_select_db($dbname, $connect);

$result = mysql_query("SELECT *, UNIX_TIMESTAMP(datum,'%d.%m.%Y') as termin FROM almuth ORDER BY datum DESC");

if($result)
{
echo "<table width='1000' cellspacing='1'>\n";
while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td bgcolor='#006633'>". $row[termin]. "</td><td bgcolor='#006633'>" . $row[titel] . "</td><td bgcolor='#006633'>" . $row[zeit] . "</td><td bgcolor='#006633'>" . $row[genre] . "</td><td bgcolor='#006633'>" . $row[kontakt] . "</td>";
echo "</tr>\n";
}
echo "</table>\n";
mysql_free_result($result);
}

?>

Probier das mal so.

 
friedemann
09-10-2002, 12:20 
 
Mit deiner lösung zeigt er gar kein php mehr an. also er gibt nichts mehr aus.

anseheh (http://www.advis.de/fr/php-development/Konzertplaner-Almuth/list.php)

schau mal, warum setzt er nicht den 09 bzw den 10 an die erste stelle, denn die kommen ja eher als 12 und 13. das ist mein problem. (ich habe erst 12+13 dann 10 eingegeben)

 
Wotan
09-10-2002, 12:22 
 
Er zeigt mir was an. Siehe Grafik. War auch nur eine Möglichkeit. Wie speicherst du das Datum und die uhrzeit in der DB?

 
Wotan
09-10-2002, 12:23 
 
Poste mal das Script

 
Cosmo2000
09-10-2002, 12:28 
 
Original geschrieben von friedemann
schau mal, warum setzt er nicht den 09 bzw den 10 an die erste stelle, denn die kommen ja eher als 12 und 13. das ist mein problem. (ich habe erst 12+13 dann 10 eingegeben) [/B]

Es wird doch nach dem Datum sortiert.
Die jüngsten Daten zuerst.

Wonach willst Du denn nun eigentlich sortieren ?
Nach dem Datum oder nach der Reihenfolge der Eingabe ?

 
MelloPie
09-10-2002, 12:42 
 
Also der 13.6. liegt nunmal vor dem 9.10.
Mal noch ne Frage, warum machst Du aus dem Datum einen Timewstamp um dann per php wieder ein Datum zu machen?

 
friedemann
09-10-2002, 15:24 
 
Zum Sortieren. der 12 liegt vor dem 13 weil er aktueller ist. es steht aber der 13 oben. Es soll so passieren, das das Script immer das dem aktuellen datum am nächsten kommende oder eben das aktuelle datum oben erscheint, und dannach in absteigender reihenfolge noch die konzert die kommen werden. also wenn ein konzert vom 12 vorbei ist, soll die 13 hoch rutschen. im mom sortiert das script nach dem monat und dann schreibt es je nachdem ob das datum größer ist oder kleiner es vor oder hinter. ich wollte aber eben es so wie oben beschrieben. aber habe hier gerade nen php freak gefragt der meinte das sowas was ich will noch viel schwerer ist. was meint ihr?
##
Soll ich das Script nochmal hochladen?

 
TBT
09-10-2002, 15:35 
 
dann berechne in der SQL Abfrage den Abstand zum heutigen Datum, und sortiere danach

[Trickkiste auf]
SELECT *, ABS( UNIX_TIMESTAMP( datum ) - UNIX_TIMESTAMP( NOW() ) ) as x from ... ORDER BY x ASC
[/Trickkiste zu]

PS: ist aber nicht gerade Performanceträchtig, wenn die Tabelle voller wird

 
Wotan
09-10-2002, 15:36 
 
<?php
$result = mysql_query("SELECT *, UNIX_TIMESTAMP(datum) as termin FROM almuth WHERE datum >=time() ORDER BY datum DESC");


Es kann aber auc NOW() statt time() sein

 
friedemann
09-10-2002, 16:00 
 
Wegen der Performance, Du meinst das der dann immer lange rechnen muss?

 
Flashfactor
09-10-2002, 16:07 
 
Es reicht aber aus wenns statt:
$result = mysql_query("SELECT *, UNIX_TIMESTAMP(datum) as termin FROM almuth ORDER BY datum DESC");


$result = mysql_query("SELECT *, UNIX_TIMESTAMP(datum) as termin FROM almuth ORDER BY datum ASC");


nimmst.

Dann lautet die reihenfolge der Ausgabe dann so aus:

12.06.2002
13.06.2002
09.10.2002
10.10.2002
12.10.2002
13.10.2002

 
TBT
09-10-2002, 16:09 
 
@flashfactor:

Er will aber den Termin der deem heutigen Tage am dichtesten
ist, ganz oben haben.

@friedemann:

Er muß für jede Zeile in der Tabelle die Berechnung ausführen,
muß man testen inwieweit das vertretbar ist

 
Flashfactor
09-10-2002, 17:14 
 
Únd die alten Termine will er garnicht sehen oder?

wenn ja


$count = mysql_query("SELECT COUNT(*) AS COUNT, UNIX_TIMESTAMP(datum) as termin FROM almuth");
if($result)
{
$count = mysql_fetch_array($result);
}
$result = mysql_query("SELECT *, UNIX_TIMESTAMP(datum) as termin FROM almuth ORDER BY datum ASC LIMIT ".$count['COUNT'].");


Bin mir net sicher ob es ganz richtig ist aber so sollte es funktionieren.

 
Campus
09-10-2002, 17:44 
 
ich hab mir den ganzen thread durchgelesen und nicht verstanden worums geht :dontknow: sollen die einträge nach datum aufgelistet werden, aber die vergangen nicht mehr ? sollen die einträge die an nächsten zu heute sortiert werden, aber die vergangegen nicht mehr ( prinzig das gleiche) ?oder was jetzt ?

 
friedemann
09-10-2002, 18:04 
 
Also, der User kann in seiner Eingabemaske zu jedem Termin das Stattfindedatum eintragen. Mein Planer soll jetzt immer erkennen wann das nächste aktuelle Konzert ist und dieses an die erste Stelle setzten. Ist der Termin vorbei so soll der Termin dahin rutschen wohin er gehört ( als wenn ein konzert am 2.5 war darunter stehen noch 1.1 und 3.4 dann soll es vor diese beiden rutschen) und das nächste aktuelle was ansteht wieder an die erste stelle rutschen. das in den klammern ist nicht so wichtig, aber das immer das aktuellste oben steht ist wichtig.

 
TobiaZ
09-10-2002, 20:46 
 
Nebenbei:

Hab mir mal dein Backend angesehen. Wäre es nicht sinnvoll Datum und Uhrzeit in ein Feld zu schreiben (DATETIME)? Kannst du ja nachher noch auseinanderfrickeln.

Das war die eine Sache. Und zum anderen, was ist bei der Abfrage so schwer. Ich denke mit den Beiträgen sollte das jetzt aber auch schon gelößt sein.

Gibt mehrere Ansätze; eine Möglichkeit:

Select >= NOW() mit LIMIT 1,1 und da drunter noch ne tabelle in der du alle (anderen) Termine anzeigst.

Oder checkst bei jedem ausgelesenen Termin, ob er der nächste ist, wenn nicht lässt du Ihn anzeigen, wenn doch, dann schreibst du ihn als aktuellen Termin

 
friedemann
10-10-2002, 09:28 
 
Es klappt nicht. Was Flashfactor oben mit ASC gemeint hat geht zwar, aber er soll ja nicht so:

12.06.2002
13.06.2002
09.10.2002
10.10.2002
12.10.2002
13.10.2002

ausgeben sondern so:

09.10
10.10
12.10
13.10
12.06
13.06

@Tobiaz, deine Antwort versteh ich nicht mit dem SELECT >= .....

Noch irgendwelche Ideen dazu?

 
Cosmo2000
10-10-2002, 10:03 
 
Annähernd an das was Du angezeigt haben möchtest,
würde ich die Ausgabe der Daten in zwei Schritten vollzeihen.

Der erste Query ermittelt alles was in der Zukunft liegt,
der zweite Query alles Vergangene.

 
friedemann
10-10-2002, 10:16 
 
kannst du mir das bitte mal näher erklären? also nen kleinen bsp code, oder unter welcher rubrik soll ich in meinem schlauen buch nachschlagen?

 
Cosmo2000
10-10-2002, 11:05 
 
Beispiel:
$n=time();

$result=mysql_query("SELECT *, UNIX_TIMESTAMP(datum) FROM almuth WHERE date>='$n' ORDER BY date ASC");
while($row = mysql_fetch_array($result)) { echo strftime("%d.%m.%Y", $row['datum'])."<br>"; }


$result=mysql_query("SELECT *, UNIX_TIMESTAMP(datum) FROM almuth WHERE date<'$n' ORDER BY date ASC");
while($row = mysql_fetch_array($result)) { echo strftime("%d.%m.%Y", $row['datum'])."<br>"; }

 
Campus
10-10-2002, 12:37 
 
wenns dir darum geht, an ein bestimmtes datum dich anzunährern ist das aber falsch,
nimm doch einfach, das was TBT schon lange vorher vorgeschlagen hat, um mach dir keine sorgen um die preformance.


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:57 Uhr.