Hi all,

Ik heb een tabel, genaamd "list". de structuur is als volgt:

id,friendName,friendEmail,name,email,ip,date,time,messageType

Het aantal items in de tabel loopt nu tot in de 700.
In "date" staat de dag als "November 01, 2007".

Nou komt het probleem. Ik wil kunnen zien hoeveel berichtjes er de afgelopen twee weken (14 dagen) zijn verstuurd, en ze te sorteren op "date". Het lukt me alleen niet om een juiste query ervoor te vinden.
Zelf heb ik al geprobeerd te werken met BETWEEN en de GROUP BY functie, maar het lukt me niet deze te combineren. Ik zou dus als output dit willen krijgen:

date = "November 01, 2007"
aantal verzonden = 12

Is dit duidelijk of praat ik wartaal?
In "date" staat de dag als "November 01, 2007".
En waar is dan de datum? Voor zover mij bekend, slaat geen enkele database een datum op als een string. Jouw 'datum' is in MySQL in elk geval geen datum, geen DATE. Het datatype DATE eist namelijk het formaat yyyy-mm-dd. En wanneer je ook de tijd nodig hebt, gebruik je een DATETIME.

Zie de handleiding voor de details van de diverse datatypes en duik dan ook even in de diverse functies. Er is een hele serie datum- en tijdfuncties beschikbaar, ook om jouw problemen op te lossen.

Maar begin met de datatypes, dat veroorzaakt de grootste problemen.
nee daar ligt het probleem niet, want ik gebruik dit:

$format = "%B %d, %Y";
$now=getdate();
$then=strftime($format,mktime($now['hours'],$now['minutes'],$now['seconds'],$now['mon'],$now['mday']-14,$now['year']));
$now=strftime($format,mktime($now['hours'],$now['minutes'],$now['seconds'],$now['mon'],$now['mday'],$now['year']));

dan probeer ik met BETWEEN tussen deze data te selecteren.
Bob Kruithof schreef op 17.12.2007 00:17
nee daar ligt het probleem niet, want ik gebruik dit:

$format = "%B %d, %Y";
$now=getdate();
$then=strftime($format,mktime($now['hours'],$now['minutes'],$now['seconds'],$now['mon'],$now['mday']-14,$now['year']));
$now=strftime($format,mktime($now['hours'],$now['minutes'],$now['seconds'],$now['mon'],$now['mday'],$now['year']));

dan probeer ik met BETWEEN tussen deze data te selecteren.
Grappenmaker.

Ga eerst eens iets leren over SQL en datatypes en ga dan pas de wijsneus uithangen. strftime() is een bewijs van onkunde, het is geen oplossing. Zie je huidige probleem.
man doe is aardig, ik vraag alleen wat.

en het hoeft niet uit te maken of je het via date doet in sql, of zo. het geeft allebei hetzelfde resultaat. en wil ik het nu via date doen, dan moet ik een aantal systemen veranderen.

nogmaals mijn vraag:

ik wil de resultatan tussen twee datums weergegeven kregen als:

datum1 = aantal berichten
datum2 = aantal berichten
...

enz.

en wie is er hier de wijsneus? please, ik vraag om een antwoord, niet om een discussie. daar is deze website niet voor dacht ik.
In dat geval kun je een oplossing in SQL wel vergeten, je kunt niet/nauwelijks een string met een datum gaan vergelijken. Dan zul je dus eerst álle records uit de database moeten ophalen en dan in php met een datumfunctie de boel gaan vergelijken.

Met 700 records is dat geen probleem, maar met een paar duizend/honderdduizend/miljoen records kun je dit wel vergeten. Bestel dan eerst maar een pizza, die is sneller bezorgt dan het antwoord op jouw datum.

Ga met datums werken, dus met een DATE of DATETIME en laat de database voor jou werken. Die kan dat vele malen sneller dan dat de webserver (Apache/php) dit kan. Kan een factor tig-1000 schelen.
en stel dat het dus beter zou zijn om DATE of DATETIME te gebruiken?
hoe sorteer je dan per dag, vanuit een query? het is mogelijk, maar niet in combinatie met een BETWEEN functie zover ik weet.

wat een antwoord op mijn vraag zelf is nog ver te zoeken helaas:S hoe moet het dan wel? kan je een voorbeeld geven?
SELECT * FROM tabelnbaam ORDER BY datum DESC

Dit sorteert de boel aflopend. Voor oplopend gebruik je ASC.

SELECT * FROM tabelnbaam WHERE datum BETWEEN '2007-12-10' AND '2007-12-15'

Haalt de records op tussen 10 en 15 december. SQL maakt de boel zó eenvoudig.
Dit kan ik met twee vingers in mijn neus ook wel, maar mijn vraag is dit:

selecteren van data tussen datum 1 en datum 2, en die groeperen op dag.

in ingewikkelde versie van dit dus: http://www.semeleer.nl/tut_sql.html#gb

SELECT
  COUNT(*) AS aantal,
  datum
FROM
  tabelnaam
WHERE
  datum BETWEEN '2007-12-10' AND '2007-12-15'
GROUP BY
  datum
ORDER BY
  datum DESC

Wederom stelt het niet zo heel veel voor.
eindelijk een antwoord! joechei!

het werkt, en het werkt prima met mijn oplossing in strftime(), die wordt uitgerekend VOORDAT de query uberhaupt wordt gemaakt.

bedankt ;)

Reageren