Probeelm bij maken van query in MySQL

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Mr Bob

Mr Bob

16/12/2007 23:33:00
Quote Anchor link
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?
 
PHP hulp

PHP hulp

08/09/2024 04:18:59
 
Frank -

Frank -

17/12/2007 00:14:00
Quote Anchor link
Quote:
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.
 
Mr Bob

Mr Bob

17/12/2007 00:17:00
Quote Anchor link
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.
Gewijzigd op 01/01/1970 01:00:00 door Mr Bob
 
Frank -

Frank -

17/12/2007 00:38:00
Quote Anchor link
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.
 
Mr Bob

Mr Bob

17/12/2007 00:43:00
Quote Anchor link
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.
 
Frank -

Frank -

17/12/2007 00:48:00
Quote Anchor link
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.
 
Mr Bob

Mr Bob

17/12/2007 00:52:00
Quote Anchor link
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?
 
Frank -

Frank -

17/12/2007 00:54:00
Quote Anchor link
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.
 
Mr Bob

Mr Bob

17/12/2007 00:58:00
Quote Anchor link
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
 
Frank -

Frank -

17/12/2007 01:02:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
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.
 
Mr Bob

Mr Bob

17/12/2007 01:11:00
Quote Anchor link
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 ;)
 
Frank -

Frank -

17/12/2007 01:15:00
Quote Anchor link
Heb je dat ook getest met datums in andere maanden en andere jaren? Met jouw oorspronkelijke opzet gaat dat namelijk echt niet werken, onmogelijk. April komt namelijk echt eerder dan maart.... Of niet dan??? En februari ligt natuurlijk ergens tussen april en maart, althans, wanneer je het alfabetisch bekijkt.
 
Mr Bob

Mr Bob

17/12/2007 01:20:00
Quote Anchor link
is niet nodig, want ik roep het op per maand

nogmaals bedankt hey
 
Frank -

Frank -

17/12/2007 01:23:00
Quote Anchor link
Jammer dat je te eigenwijs bent om toe te geven dat er een bug in je systeem zit. Noteer hem wel, dan weet je waar je het zoeken moet op het moment dat je weer eens met 'datums' in de knoop zit.

Je werkt jezelf nu alleen maar in de nesten, de juiste datatypes kiezen, is de basis van een goed systeem. En daar heb je een foutje gemaakt, los deze dan z.s.m. op, dat scheelt je straks een hoop ellende. Je weet nu bv. al dat jij niet/nauwelijks datumvergelijkingen kunt maken, sorteren op datums vrijwel onmogelijk is, etc. etc.
 
Mr Bob

Mr Bob

17/12/2007 02:16:00
Quote Anchor link
Jammer dat je te eigenwijs bent om toe te geven dat er een bug in je systeem zit. Noteer hem wel, dan weet je waar je het zoeken moet op het moment dat je weer eens met 'datums' in de knoop zit.

even een beetje dimmen graag, dit vind ik echt pure onzin. de enige bug in mijn systeem was dat ik geen juiste query had. en ik wist ook niet hoe ik die moest formuleren. ik heb de afgelopen twee dagen hiernaar gezocht en ben uiteindelijk hier maar geregistreerd om vervolgens de vraag aan jullie te stellen. en dan krijg ik dit soort onbeschofte reacties? Waar gaat dit over?

Het zou fijn zijn als je gewoon meteen antwoord op je vraag kreeg, in plaats van dat er (in bijna elk forum topic dat ik hier lees, echt bijna elk!) gekleineerd wordt, uit de hoogte wordt gedaan, en dit soort ongein als "te eigenwijs zijn om". Ik vind dit een prima website, maar mensen zoals jij, pgFRank zouden een beetje moeten dimmen en zich moeten richten op het helpen van mensen in plaats van doen alsof je boven een ander staat.

Als ik kijk naar de laatste berichten die pgFrank bij verschillende mensen heeft gepost, zijn ze vrijwel allemaal terechtwijzend, en is hij niet echt aardig. phphulp.nl zou zich moeten schamen voor dit soort leden.
 
Timmy

timmy

17/12/2007 07:32:00
Quote Anchor link
huh? eerst zeg je dat pgFrank moet dimmen en dan ga je zelf te keer...
 
- -

- -

17/12/2007 08:41:00
Quote Anchor link
Bob, neem dit van mij aan: pgFrank is het enige persoon hier die écht iets van databases af weet. Dan zijn er nog een handje die er erg veel vanaf weten, dan zijn er mensen die er prima mee overweg kunnen, dan zijn er mensen die denken dat ze er iets mee kunnen en dan heb je menden die niets met een database kunnen.
Jij zit in de een-na-laatste groep. Als je niet openlijk wilt accepteren dat je een fout hebt gemaakt, oké dan, maar ga jezelf niet zo voor de gek houden.
Wij gaan ons trouwens niet schamen voor pgFrank, wij zijn trots op hem, omdat hij degene is met de meeste database kennis, en hij altijd een goed antwoord voor je heeft! Als je het lekker vindt ga je nu op mij zeiken, maar het kan mij persoonlijk geen **** schelen.
 
Robert Deiman

Robert Deiman

17/12/2007 08:55:00
Quote Anchor link
Bob, ik heb net het hele topic doorgelezen, en het valt me op dat je alles wat Frank aandraagt als verbeteringen (en geloof mij, het zijn verbeteringen!) opvat als kritiek. Hij probeert je bij te brengen dat je voor een datum in (my)SQL een datetime of date veld moet gebruiken. Met die waarden kan je prima rekenen binnen de database wat ook echt sneller is dan rekenen zoals jij dat wil.
Bovendien: Je kan je beter meteen aanleren om een datum in het daarvoor bedoelde datatype op te slaan, omdat de huidige opzet in de (nabije) toekomst zeker voor problemen gaat zorgen.

Frank valt je werkwijze (datamodel in dit geval) aan, en niet jou persoonlijk. Hij is eigenlijk 1 van de weinigen hier die behalve alleen maar simpel antwoord geven op een vraag, verbeteringen aandraagt die problemen in de toekomst kunnen en zullen voorkomen. Probeer beter met deze feedback (want dat is het) om te gaan, en je zal versteld staan hoeveel gemakkelijker je ineens kan werken met je systeem.
 
Hipska BE

Hipska BE

17/12/2007 09:27:00
Quote Anchor link
@bob: ik zou toch écht wel eens overwegen om te kijken naar DATE en DATETIME types in mysql hoor, ik raad je het echt aan. Ik deed het 3 jaar geleden ook zo ongeveer zoals jij nu, en geloof me, later kom je er echt mee in de knoei.

Een datum/tijd als een string opslaan doe je niet, net als je ook niet een id opslaat als een string enzo.. Enkel tekst hoor je op te slaan als string, getallen als INT en datums als DATE

overigens, wat doe je als we nu bv 6 dec zijn, en je wil de laatste 14 dagen bekijken? als ik jouw stfrtime bekijk, dan zou je between 6 dec en -8 dec doen... :-/ heel erg logisch.
 
Jacco Engel

Jacco Engel

17/12/2007 09:39:00
Quote Anchor link
Quote:
Als ik kijk naar de laatste berichten die pgFrank bij verschillende mensen heeft gepost, zijn ze vrijwel allemaal terechtwijzend, en is hij niet echt aardig. phphulp.nl zou zich moeten schamen voor dit soort leden.


Ik schaam me met name voor jou als lid op dit moment. Als je namelijk echt zoveel gelezen hebt als dat je beweerd had je dit soort uitspraken niet gedaan over Frank.

Ik word ook echt niet altijd vrolijk van hem dat mag je van me aannemen maar ik respecteer zijn inbreng omdat het goed is en hij weet waar hij over praat.

De manier waarop hij het brengt vind ik niet altijd de meest tactische maar bij Frank is de kunst (vind ik) om daar doorheen te prikken en te kijken wat hij probeert duidelijk te maken.

Als je dat goed doet heb je aan frank een goede informatiebron waar de meeste mensen (en ik niet de minste) nog een hoop van kunnen leren.

Respect to Frank.
 
- wes  -

- wes -

17/12/2007 09:41:00
Quote Anchor link
Noone fucks with Frank from brazil.

Bob, denk je nou serieus dat iemand met 8143 posts alleen maar peop praat?
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.