ff 2 vraagjes in 1..

ik heb een poosje terug (gister d8 ik) gevraagd naar een code om het eerst volgende concert uit de databse te pakken, nl:
SELECT * FROM concertagenda WHERE datum > NOW() ORDER BY datum DESC LIMIT 0,1
deze werkt alleen niet.
datum = DATE, en daar staan 2004-09-07 (id=81) en 2005-04-23 (id=79). Nu geeft ie die van 2005-04-23 weer, terwijl de andere er eigenlijk zou moeten staan, want deze komt eerst, het stukje script dat ik ervoor gebruik:
<?php
$sql = "SELECT * FROM concertagenda WHERE datum > NOW() ORDER BY datum DESC LIMIT 0,1";
$resultaat = mysql_query($sql) or die ("query mislukt");
while ($rij = mysql_fetch_object($resultaat)){
$datum = htmlspecialchars($rij->datum);
$concert = htmlspecialchars($rij->concert);
set_smilies($bericht);
echo "<a href='?p=concertagenda'>".$concert."</a>";
}
?>

Hoe is dit, als het is, op te lossen?

2e vraag.
Ik heb een zootje concerten in 1 database, id=79 tm 81.
Data: 2005-04-23, 2005-04-22, 2004-09-07.. zo staat het ook op de pagina, en ik wil andersom :S.
is dezelfde tabel als bovenstaande: datum = DATE.

script [concertagenda.php]
<?
include("includes/ubb.php");
include("includes/connect.php");
?>

<table class="tbl1"><tr><td>
<table>
<?php
$sql = "SELECT * FROM concertagenda ORDER BY datum DESC";
$resultaat = mysql_query($sql) or die ("query mislukt");
while ($rij = mysql_fetch_object($resultaat)){
$datum = htmlspecialchars($rij->datum);
$concert = htmlspecialchars($rij->concert);
set_smilies($bericht);
echo "<tr>\n";
echo "<td><b>".$datum."</b></td>\n";
echo "<td>".$concert."</td>\n";
echo "</tr>\n";
}
?>
</table>
</td></tr></table>

zal ook wel een fout van mij inzitten.

Misschien dat het aan de invoer bij de database ligt, ik ehb eerst eens 23-04-2005 ingevoerd, dit werd misvormd, heb ik er 2005-04-23 van gemaakt, ging goed, of is dit nu fout (type=DATE).

BVD,
Grt,
Jorik
Hmm, ik had gister dat antwoord gegeven. Sorry fout van mij, je moet ipv dit:

SELECT * FROM concertagenda WHERE datum > NOW() ORDER BY datum DESC LIMIT 0,1

Dit gebruiken:

SELECT * FROM concertagenda WHERE datum > NOW() ORDER BY datum ASC LIMIT 0,1

Je 2e vraag is eigenlijk hetzelfde probleem, verander:

SELECT * FROM concertagenda ORDER BY datum DESC

eens in:

SELECT * FROM concertagenda ORDER BY datum ASC
Nu werkt het :D
Bedankt...
Nog een vraag:
Als ik
<?php
$sql = "SELECT * FROM concertagenda ORDER BY datum ASC";
verander in
<?php
$sql = "SELECT * FROM concertagenda WHERE datum > NOW() ORDER BY datum ASC";

krijg ik dan alleen de concerten te zien NAAR vandaag?..

kan het ook dat automatisch concerten die geweest zijn (dus naar NOW) automatisch gewist worden?
Jup, wat je zegt klopt.

En je idee is ook mogelijk, dan moet je een pagina maken waarbij de volgende query wordt uitgevoerd:

DELETE FROM concertagenda WHERE datum < NOW()

Maar dat is opzich zonde, omdat je door ze niet te wissen een mooi overzicht houdt van concerten. Kun je later weer een mooi overzicht van maken, soort geschiedenis ofzo. Maar dan dus selecteren met "WHERE datum < NOW()" :)
Je kunt de data misschien omschrijven naar een beter leesbaar formaat:

<?
$datum = substr(8, 2, $datum).'-'.substr(5, 2, $datum).'-'.substr(0, 4, $datum);
?>

Ziet er beter uit :)

-edit-
Bij je kolom "Eerstvolgende concert":
Fatal error: Call to undefined function: set_smilies() in /usr/export/www/vhosts/funnetwork/hosting/wpharmonie/index.php on line 187
waar moet ik die invoeren :$, ben niet zo goed in php :D
Vervang:

<?
echo "<td><b>".$datum."</b></td>\n";
?>

Voor:

<?
echo "<td><b>".substr(8, 2, $datum).'-'.substr(5, 2, $datum).'-'.substr(0, 4, $datum)."</b></td>\n";
?>
zit denk ik een foutje in
ik krijg allen te zien '--' voor de rest nix (jah, het concert erachter)
Hmm, dan kan het niet ineens..Moet het iets uitgebreider.

Vervang:

<?
echo "<td><b>".$datum."</b></td>\n";
?>

Voor:

<?
$nieuweDatum = substr(8, 2, $datum).'-'.substr(5, 2, $datum).'-'.substr(0, 4, $datum);
echo "<td><b>".$nieuweDatum."</b></td>\n";
?>

Werkt dat wel?

Reageren