PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Substr


Mike²
15.12.2009, 07:37:40
Hallo,

ich lese mir aus einem Fahrplan die Abfahrtszeiten (und Richtungen) von Fahrzeugen aus.

Die Datenbank ist so gefüllt:
05:16 > Fahrtrichtung; 05:59 > Fahrtrichtung; 06:19 > Fahrtrichtung; 06:38 > Fahrtrichtung; 06:58 > Fahrtrichtung; 07:18 > Fahrtrichtung; ...

$sql = "SELECT * FROM fahrplan";
$result = mysql_query($sql) or die("Anfrage nicht erfolgreich");

while ($row = mysql_fetch_array($result))
{
$teile = explode(";", $row['fahrplan wt']);
$i = 0;

while($i < count($teile))
{
echo $teile[$i]."<br>";
$i++;
}
}

Dies ergibt mir folgendes Ergebnis.

05:16 > Fahrtrichtung
05:59 > Fahrtrichtung
06:19 > Fahrtrichtung
06:38 > Fahrtrichtung
06:58 > Fahrtrichtung
07:18 > Fahrtrichtung
...

Soweit noch alles im grünen Bereich...
Ich würde mir aber gern nur die Fahrzeuge auflisten die bsp. zwischen 05:00 und 07:00 Uhr (jetztige Uhrzeit + 2 Stunden) abfahren.

Ich hab dazu erst mal versucht, per substr an die Uhrzeit allein zu kommen, aber da wird mir nur der erste Wert korrekt angezeigt.

echo substr($teile[$i], 0, 5)."<br>";

05:16 > Fahrtrichtung
05:16
05:59 > Fahrtrichtung
05:
06:19 > Fahrtrichtung
06:
06:38 > Fahrtrichtung
06:
06:58 > Fahrtrichtung
06:
07:18 > Fahrtrichtung
07:
...

Hat jemand ne Idee, wie ich die Ausgabe so sortieren kann, das mir nur 2 Stunden angezeigt werden?
Oder zumindest einen Hinweis, wie ich den substr korrekt ausgeführt bekomme, so das in allen Zeilen die ganze Uhrzeit steht?

Beste Grüße
Mike

vt1816
15.12.2009, 10:53:16
[...]
Hat jemand ne Idee, wie ich die Ausgabe so sortieren kann, das mir nur 2 Stunden angezeigt werden?
Oder zumindest einen Hinweis, wie ich den substr korrekt ausgeführt bekomme, so das in allen Zeilen die ganze Uhrzeit steht?

Beste Grüße
Mike

Sollte Dich weiter bringen:
echo substr(trim($teile[$i]), 0, 5)."<br>";

Ansonsten arbeite mit den Datum-/Zeitfunktionen für die Ermittlung der Zeitdifferenz.

Mike²
05.03.2010, 11:02:33
Sorry, ich war längere Zeit krank und daher erst nun meine Antwort...

Das funktioniert optimal.
Nun bekomme ich nur den gewünschten Zeitbereich angezeigt. :-)
Fahrten die in weniger als 10 Minuten statt finden, lasse ich mir nur noch per Minutenanzahl ausgeben.

$sql = "SELECT * FROM haltestellen WHERE id = '$id'";
$result = mysql_query($sql) OR die(mysql_error());

while ($row = @mysql_fetch_assoc($result))
{
$teile = explode(";", $row['fahrplanwt']);
$i = 0;

while($i < count($teile))
{

if(substr(trim($teile[$i]), 0, 5) >= $beginn && substr(trim($teile[$i]), 0, 5))
{
$abfahrtszeit = substr(trim($teile[$i]), 0, 5);
$uhrteile = explode(':', $abfahrtszeit);
$uhrzeit = date("H:i", mktime(date("$uhrteile[0]")-$stundenbeginn, date("$uhrteile[1]")-$minutenbeginn));
$minuten = explode(':', $uhrzeit);

if($minuten[0] == "00" && $minuten[1] <= "10")
{
echo "<b>".$minuten[1]." Min. ".substr(trim($teile[$i]), 5)."</b><br>";
}
else
{
echo $teile[$i]."<br>";
}
}
$i++;
}
}

Nun hab ich aber ein weiteres Problem mit der Sortierung.
Wenn ich nachträglich noch weitere Fahrten in die Datenbank eingebe, erhalte ich bsp diese Ausgabe:

5 Min. > Fahrtrichtung
05:16 > Fahrtrichtung
05:59 > Fahrtrichtung
06:19 > Fahrtrichtung
06:38 > Fahrtrichtung
06:58 > Fahrtrichtung
07:18 > Fahrtrichtung
5 Min. > Fahrtrichtung
05:16 > Fahrtrichtung
05:59 > Fahrtrichtung
06:19 > Fahrtrichtung
06:38 > Fahrtrichtung
06:58 > Fahrtrichtung
07:18 > Fahrtrichtung

Es befindet sich zwar alles im gewünschten Zeitfeld, aber leider noch nicht sortiert.
Gibt es also noch eine Möglichkeit, mit der ich sämtliche anstehende Fahrten auch noch nach der Uhrzeit sortieren kann?

Also so?
5 Min. > Fahrtrichtung
5 Min. > Fahrtrichtung
05:16 > Fahrtrichtung
05:16 > Fahrtrichtung
05:59 > Fahrtrichtung
05:59 > Fahrtrichtung
06:19 > Fahrtrichtung
06:19 > Fahrtrichtung
06:38 > Fahrtrichtung
06:38 > Fahrtrichtung
06:58 > Fahrtrichtung
06:58 > Fahrtrichtung
07:18 > Fahrtrichtung
07:18 > Fahrtrichtung

Beste Grüße und vielen Dank
Mike

vt1816
05.03.2010, 12:18:30
[...]
Es befindet sich zwar alles im gewünschten Zeitfeld, aber leider noch nicht sortiert.
Gibt es also noch eine Möglichkeit, mit der ich sämtliche anstehende Fahrten auch noch nach der Uhrzeit sortieren kann?



Arbeite mit ORDER BY (http://dev.mysql.com/doc/refman/5.1/de/order-by-optimization.html):
$sql = "SELECT * FROM haltestellen WHERE id = '$id' ORDER BY (feldname), ...";

Mike²
05.03.2010, 12:49:13
Arbeite mit ORDER BY (http://dev.mysql.com/doc/refman/5.1/de/order-by-optimization.html):
$sql = "SELECT * FROM haltestellen WHERE id = '$id' ORDER BY (feldname), ...";

Hallo vt1816,

danke für deine schnelle Antwort.
Das würde ich sehr gerne machen (wende ich auch bei vielen anderen Selects an) aber das Problem ist,
das es sich hierbei nur um ein Feld handelt, in dem alle Daten beinhaltet sind.

05:16 > Fahrtrichtung;05:59 > Fahrtrichtung;06:19 > Fahrtrichtung;06:38 > Fahrtrichtung;06:58 > Fahrtrichtung;07:18 > Fahrtrichtung;05:16 > Fahrtrichtung;05:59 > Fahrtrichtung;06:19 > Fahrtrichtung;06:38 > Fahrtrichtung;06:58 > Fahrtrichtung;07:18 > Fahrtrichtung;

Daher explode ich diese ja auch... :-)
$teile = explode(";", $row['fahrplanwt']);

Also kann ich meineserachtens das ORDER BY nicht anwenden...

vt1816
05.03.2010, 13:17:57
Gebe die Informationen/Ergebnisse nicht sofort aus, sondern packe sie in ein Array, sortiere es und mache anschließend die Ausgabe(n).

Mike²
06.03.2010, 00:10:43
Ich Idiot...

Das Explode gibt sein Ergebnis ja bereits als Array aus.

$teile = explode(";", $row['fahrplanwt']);
sort($teile);

Und schon ist alles wunderbar sortiert... :-)

Trotzdem vielen Dank
Mike

vt1816
06.03.2010, 08:16:23
Ich Idiot...

Selbsterkenntnis ist der erste Weg zu Besserung ;-)