TomasAMedlem sedan feb. 2003184 inlägg Kör PHP och MySQL
I min kalender tappar jag 1:a posten som skall vara med.
Har äldre poster med i dasen men det funkar ok
Har följande select:
$result=mysql_query("select * FROM kalender WHERE CURDATE() <= dag AND CURDATE() <= '".date("Y-12-31")."' ORDER BY dag limit 20");
Är denna fel eller skall jag leta efter felet någon annanstans i koden?
Mvh
Du har ett fel åtminstone: CURDATE() <= '".date("Y-12-31")."'
Där kollar du om dagens datum är mindre än eller lika med sista december i år. Och det är ju alltid sant.
Jag antar att det du vill söka efter är dag <= '".date("Y-12-31")."'. Ett bättre sätt att uppnå det resultatet är: ... AND YEAR(dag) = YEAR(NOW())
Det bör dock ändå inte vara orsaken till ditt problem. Vilken datatyp är dag? Eller mer intressant, vad lagrar du där? Bara datum eller datum och tid?
TomasAMedlem sedan feb. 2003184 inlägg Jag har två datum
1 - date som är när posten registeras. Typ "date"
2 - dag som är när händelsen sker. Typ "datetime" Detta för att kunna sortera händelse på samma dag efter när på dagen det sker.
Och databasen är MySQL 5.1
OK?
TomasAMedlem sedan feb. 2003184 inlägg Jag tror detta sök är helt onödigt för mig.
CURDATE() <= '".date("Y-12-31")."'
Nej, helt OK är det inte. Det enda "date" jag ser i frågan ovan är date("Y-12-31") och sättet du använder det på är felaktigt, som jag förklarade ovan. (date är som du använder det där en funktion i PHP.)
Dessutom kan det eventuellt bli fel med CURDATE() <= dag om servern har en annan tidszon inställd. Om ett inlägg har dag satt till någon gång under natten/morgonen till idag kan det vara sparat som sen kväll igår, sett från databasens sida. Och kommer alltså inte dyka upp i resultatet. Prova att ändra tiden för den saknade posten till något senare och se om den syns. Då vet du i alla fall vad felet är.
TomasAMedlem sedan feb. 2003184 inlägg Har ändrat select till
$result=mysql_query("select * FROM kalender WHERE CURDATE() <= dag ORDER BY dag limit 20");
och det fungerar OK, men 1:a posten fortfarande borta.
Värdet på "dag" i den posten är "2010-04-12 10:00:00" - alltså inte tidzons-fel.
Har också testat med att ta bort posten - då är det gamla 2:a som försvinner.
Jag är klart fundersam!
Då ligger felet troligen i PHP-koden. Vad händer om du kör frågan i phpMyAdmin?
TomasAMedlem sedan feb. 2003184 inlägg Glömde bort den möjligheten - tack för det!
Jag fick följande svar:
#1064 - 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 '$result=mysql_query("select * FROM kalender WHERE CURDATE() <= dag ORDER BY dag"' at line 1
Skall nu kolla min manual
:r
select * FROM kalender WHERE CURDATE() <= dag ORDER BY dag
$result=mysql_query(" är ju PHP-kod. Själva SQL-frågan finns i strängen och ser ut som ovan.
TomasAMedlem sedan feb. 2003184 inlägg Det enda phpMyAdmin föreslog (eller visade) var att sätta in 0 i LIMIT enligt
LIMIT 0 , 3 ( Var tvungen att ha med LIMIT, annars blir visningen för lång.)
Testade även utan det, men med samma resultat.
colioneMedlem sedan juni 20013 386 inlägg Hur ser det ut om du kör en SHOW CREATE TABLE Kalender;
Kör SQL-frågan SHOW CREATE TABLE Kalender; i phpMyAdmin och kopiera svaret hit. Den SQL-frågan visar information angående tabellen Kalender som kan vara användbara.
TomasAMedlem sedan feb. 2003184 inlägg Svar: Din SQL-fråga utfördes korrekt.
+Alternativ
kalender CREATE TABLE `kalender` (
`kalendid` int(6) unsi...
??
Du måste få ut hela texten, det där är bara början. Ser du möjligen ett T med två pilar på sidorna? Isåfall, klicka på den.
TomasAMedlem sedan feb. 2003184 inlägg Hej igen
Då fick jag ut tabellstrukturen enl nedan:
kalender CREATE TABLE `kalender` (
`kalendid` int(6) unsigned NOT NULL AUTO_INCREMENT,
`event` varchar(60) NOT NULL,
`var` varchar(60) NOT NULL,
`om` longtext,
`eventdag` varchar(40) NOT NULL,
`datum` date NOT NULL,
`dag` datetime DEFAULT NULL,
`tid` varchar(5) DEFAULT NULL,
`adminid` int(6) DEFAULT NULL,
`bild1` varchar(40) DEFAULT NULL,
`bild1ext` varchar(20) DEFAULT NULL,
`bildtext1` varchar(100) DEFAULT NULL,
`bild2` varchar(40) DEFAULT NULL,
`bild2ext` varchar(20) DEFAULT NULL,
`bildtext2` varchar(100) DEFAULT NULL,
PRIMARY KEY (`kalendid`)
) ENGINE=MyISAM AUTO_INCREMENT=29 DEFAULT CHARSET=latin1
OK, eller? :q
colioneMedlem sedan juni 20013 386 inlägg Hur ser posten du tappar ut då?
Tomas, det här kanske är en dum fråga, men... Har du möjligen en for-loop där du sätter $i=1 fast du borde sätta $i=0
Eller kan det vara så att du kör hämtar ut data med while($row = mysql_fetch_assoc($result)) fast du kör mysql_fetch_assoc($result) en gång innan loopen startar så att du missar en post på det viset?
TomasAMedlem sedan feb. 2003184 inlägg Nej ingen dum fråga. Det är jag som försöker lära mig.
Min kod ser ut så här:
$i = 0;
while ($myrow = mysql_fetch_array($result) AND $i <= 4)
Och vad är skillnaden mellan assoc och array?
Men det förändrar inte resultatet om jag ändrar till assoc.
TomasAMedlem sedan feb. 2003184 inlägg Hej nitro2k01!
Jag hittade det Du pekade på, nämligen en **FOR-**loop som inte skulle vara med.
Fast det visste jag inte, men Din fråga gjorde att jag kontrollerade och testade och pang på - där satt den!
Jättestort tack för Din hjälp!
Kanon!