ordenen op tijd in twee rijen
Ik ben wat aan het worstelen met het veiling systeem op mijn website. Een speler heeft de kans om een object op de veiling te zetten, waar hij zelf kan bepalen hoeveel uur hij deze erop zet.
Er is dus een rij in de database voor de datum, die middels NOW() wordt ingevoerd en een rij voor het aantal seconden dat het object op de veiling komt te staan. (dus het geposte aantal uren * 3600)
Nu wil ik alle objecten die op de veiling staan ordenen op tijd dat ze aflopen, maar dit lukt me nog niet helemaal. Zie hieronder wat ik al heb:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$rowObjects = mysql_query("SELECT id FROM veiling");
while($show = mysql_fetch_assoc($rowObjects)) {
$selectObjects = mysql_query("SELECT *,UNIX_TIMESTAMP(datum) AS datum,0 FROM veiling WHERE id='".$show['id']."'");
$objectResult = mysql_fetch_assoc($selectObjects);
// verschil tussen huidige tijd en plaatsingstijd + seconden checken
if($objectResult['tijd'] + $objectResult['seconden'] > time()) { // veiling nog niet afgelopen
// hier wordt de tijd bepaald hoe lang de veiling nog duurt, om deze later te printen
$verschil1 = $objectResult['tijd'] + $objectResult['seconden'] - time() - 3600;
$verschil = date("H:i:s", $verschil1);
}else{
// veiling afgelopen, script verder niet van belang
}
}
?>
$rowObjects = mysql_query("SELECT id FROM veiling");
while($show = mysql_fetch_assoc($rowObjects)) {
$selectObjects = mysql_query("SELECT *,UNIX_TIMESTAMP(datum) AS datum,0 FROM veiling WHERE id='".$show['id']."'");
$objectResult = mysql_fetch_assoc($selectObjects);
// verschil tussen huidige tijd en plaatsingstijd + seconden checken
if($objectResult['tijd'] + $objectResult['seconden'] > time()) { // veiling nog niet afgelopen
// hier wordt de tijd bepaald hoe lang de veiling nog duurt, om deze later te printen
$verschil1 = $objectResult['tijd'] + $objectResult['seconden'] - time() - 3600;
$verschil = date("H:i:s", $verschil1);
}else{
// veiling afgelopen, script verder niet van belang
}
}
?>
Ik wil dus dat er in de $rowObjects query wordt geordend van korte tijdsduur dat de veiling nog duurt, naar lange tijdsduur, en dat lukt me dus niet...
Ik hoop dat er iemand is die mij in dit zonnige paasweekend kan helpen!
Bij voorbaat dank!
Jonas
Als je het query resultaat ordent met onderstaande code moet er volgens mij het goede uitkomen.
ORDER BY (TIME_TO_SEC(date)+seconden))
Oftewel: convert datum naar seconden en voeg daarbij de seconden van die de veiling duurt. Het totaal is het eindtijdstip.
Greetz,
Theforce117
ORDER BY (datum + INTERVAL 1 HOUR);
En wanneer je er 2 uur van wilt maken, maak je er 2 uur van.
Ik snap echt niet waar die voorliefde voor seconden vandaan komt, het is vaak een bron van bugs omdat je niet eenvoudig kunt zien of de uitkomsten wel goed zijn. Gewoon met uren, dagen, maanden, jaren, etc. rekenen, is veel eenvoudiger. Unix is leuk als besturingssysteem, niet om mee te rekenen.
Oke, in minuten lijkt mij wel voldoende aangezien niemand ooit een veiling wil van 10 seconden, maar de keuze voor seconden vind ik zo gek nog niet.
Gewijzigd op 01/01/1970 01:00:00 door The Force
10 MINUTE? Lijkt mij toch niet zo lastig.
Hij heeft een kolom waar de tijd die de veiling duurt in staat. Dat doet hij in seconden omdat als je het in uren opgeeft je voor halve uren 0.5 moet invullen. Wat niet kan als het een int datatype is.
Wat overigens wel inderdaad mooier zou zijn is om de volgende code te gebruiken:
ORDER BY (datum + INTERVAL seconden SECOND)
Theforce117 schreef op 11.04.2009 20:29:
Daar heb je het datatype INTERVAL voor, precies wat hier nodig is. Wanneer je dan een interval van 10 minuten wilt hebben, vul je 10 minuten in. Wil je een interval van 3 maanden en 8 dagen hebben, vul je '3 MONTHS 8 DAYS' in. Allemaal niet zo moeilijk. Heeft ook als voordeel dat je geen problemen krijgt met schrikkeljaren en schrikkelsecondes, houdt de database allemaal rekening mee.Hij heeft een kolom waar de tijd die de veiling duurt in staat. Dat doet hij in seconden omdat als je het in uren opgeeft je voor halve uren 0.5 moet invullen. Wat niet kan als het een int datatype is.
ORDER BY (datum + kolom_met_interval) ASC
Thanks.