PDA

Volledige versie bekijken : DAY() is SQL [php]


GvanL
%Europe/Berlin %804 %2009, 19:19
Hey

Ik ben bezig met een lijstje waarin verjaardagen van deze maand worden getoond. Nu heb ik in een databse mensen staan met hun geboortedatum in het formaat 2009-12-31 (jjjj-mm-dd) en dat wil ik ophalen met SQl en deze sorteren op de day (oplopend). Ik heb het volgende geprobeerd maa dit werkt niet:


$maand = date("m");


SELECT Naam, Geboortedatum
FROM Personen
WHERE MONTH(Geboortedatum) = '$maand'
ORDER BY DAY(Geboortedatum) DESC

Dit werkt niet, wat doe ik verkeerd? (kan het uberhaupt wel :S )

Bedankt!

WernerL
%Europe/Berlin %820 %2009, 19:41
Krijg je foutmeldingen? Krijg je een ander resultaat dan verwacht? Gaat er wat anders fout?

Geef eens wat meer informatie, niemand kan die sql query even testen om te kijken wat er fout gaat. Jij hebt namelijk de database, wij niet. :-)

En maar in het wilde weg gaan gokken schiet natuurlijk ook niet op.

GvanL
%Europe/Berlin %849 %2009, 20:23
Ik krijg dan de volgende foutmelding:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/grster/domains/groenesterhandbal.nl/public_html/welkom.php on line 505

en op line 505 staat:
if (mysql_num_rows($resultaatVJ)>0){

Deze foutmleding geeft hij niet indien de SQL Query klopt.

Koen!
%Europe/Berlin %861 %2009, 20:40
Wat is het datatype waarmee je de geboortedata in je database hebt opgeslagen?
(moet namelijk DATE of DATETIME zijn)

GvanL
%Europe/Berlin %868 %2009, 20:50
Wat is het datatype waarmee je de geboortedata in je database hebt opgeslagen?
(moet namelijk DATE of DATETIME zijn)

Het datatype is op het moment date en wordt er dus ingezet als 0000-00-00

WernerL
%Europe/Berlin %881 %2009, 21:08
Ik krijg dan de volgende foutmelding:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/grster/domains/groenesterhandbal.nl/public_html/welkom.php on line 505

en op line 505 staat:
if (mysql_num_rows($resultaatVJ)>0){

Deze foutmleding geeft hij niet indien de SQL Query klopt.

Doe dan eens mysql_query(...) or die(mysql_error());

Dan weten we iets meer. :)

GvanL
%Europe/Berlin %002 %2009, 00:03
Ok, heb het erin gezet en bij een or die geeft hij dus de tekst die ik daarvoor aangegeven heb. Hierbij het eerste deel van de code, dat werk makkelijker denk ik:


$maand = date("m");
$sqlVJ = "SELECT LID_ID, Naam, Geb_Datum
FROM Personenlijst
WHERE MONTH(Geb_Datum) = '$maand'
ORDER BY DAY(Geb_Datum) DESC, Achternaam ASC, Voornaam ASC";

//Als er meer dan 0 resultaten zijn, laat deze zien. Anders geef weer: geen jarigen gevonden.
$resultaatVJ = mysql_query($sqlVJ) or die ("<p class=style2>Kon geen verbinding maken met MySQL</P>");
echo "<table border=0 width=100% style=border: 0px;><align=left>";
if (mysql_num_rows($resultaatVJ)>0){
while ($rijVJ = mysql_fetch_array($resultaatVJ)){
$voornaam = $rijVJ["Voornaam"];
$achternaam = $rijVJ["Achternaam"];
$tussenvoegsel = $rijVJ["Tussenvoegsel"];


Hij geeft met deze code dus aan: kon geen verbinding maken met sql

023-jimmy
%Europe/Berlin %033 %2009, 00:48
Ja, nu doe je het verkeerd. Zet het gewoon is neer hoe WernerL het zegt, want hoe jij het nu doet krijg je een error te zien wat jij hebt bedacht, maar het kan ook een hele andere fout zijn. Dus doe het is zoals dit:


$maand = date("m");
$sqlVJ = "SELECT LID_ID, Naam, Geb_Datum
FROM Personenlijst
WHERE MONTH(Geb_Datum) = '$maand'
ORDER BY DAY(Geb_Datum) DESC, Achternaam ASC, Voornaam ASC";

//Als er meer dan 0 resultaten zijn, laat deze zien. Anders geef weer: geen jarigen gevonden.
$resultaatVJ = mysql_query($sqlVJ) or die(mysql_error());
echo "<table border=0 width=100% style=border: 0px;><align=left>";
if (mysql_num_rows($resultaatVJ)>0){
while ($rijVJ = mysql_fetch_array($resultaatVJ)){
$voornaam = $rijVJ["Voornaam"];
$achternaam = $rijVJ["Achternaam"];
$tussenvoegsel = $rijVJ["Tussenvoegsel"];

GvanL
%Europe/Berlin %361 %2009, 08:40
Ja, nu doe je het verkeerd. Zet het gewoon is neer hoe WernerL het zegt, want hoe jij het nu doet krijg je een error te zien wat jij hebt bedacht, maar het kan ook een hele andere fout zijn. Dus doe het is zoals dit:


$maand = date("m");
$sqlVJ = "SELECT LID_ID, Naam, Geb_Datum
FROM Personenlijst
WHERE MONTH(Geb_Datum) = '$maand'
ORDER BY DAY(Geb_Datum) DESC, Achternaam ASC, Voornaam ASC";

//Als er meer dan 0 resultaten zijn, laat deze zien. Anders geef weer: geen jarigen gevonden.
$resultaatVJ = mysql_query($sqlVJ) or die(mysql_error());
echo "<table border=0 width=100% style=border: 0px;><align=left>";
if (mysql_num_rows($resultaatVJ)>0){
while ($rijVJ = mysql_fetch_array($resultaatVJ)){
$voornaam = $rijVJ["Voornaam"];
$achternaam = $rijVJ["Achternaam"];
$tussenvoegsel = $rijVJ["Tussenvoegsel"];


Ow sorry haha, inderdaad niet echt slim op de manier waarop ik het deed;)
Maar aan de hand van de foutmelding heb ik even mijn SQL versie gecheckt en in het handboek gezocht naar tijdsfuncties, nu heb ik gevonden dat het ipv DAY() moet zijn DAYOFMONTH(). Nu werkt hij wel. Bedankt voor alle hulp!!

De foutmelding was overigens:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(Geb_Datum) DESC, Naam ASC' at line 4

Koen!
%Europe/Berlin %381 %2009, 09:09
nu heb ik gevonden dat het ipv DAY() moet zijn DAYOFMONTH()
Hmm.. dat is eigenlijk raar. De officiële MySQL-documentatie meldt:
DAY() is a synonym for DAYOFMONTH().
Maar goed, maaar dat het nu werkt. :)

WernerL
%Europe/Berlin %387 %2009, 09:17
Oude mysql versie mischien?

Koen!
%Europe/Berlin %389 %2009, 09:20
Oude mysql versie mischien?
Zou kunnen inderdaad. Ach ja, het werkt in ieder geval. :)