Toon posts:

Mysql query, van datum tot datum wilt niet meewerken.

Pagina: 1
Acties:

Onderwerpen


  • stategamer
  • Registratie: December 2007
  • Laatst online: 21-05 15:13
Hallo Tweakers,

Ik zit met een query probleem want deze doet niet wat ik wil, nou heb ik op het gebied van query's die vanaf en tot een bepaalde datum niet zo veel verstand.

In mijn Voorbeeld probeer ik vanaf de datum van vandaag (NOW() ) tot die van een maand geleden alles te selecteren.

Aangezien dit voor mij nieuw is hoopte ik dat jullie mij hiermee kunnen helpen.

De query in kwestie:

MySQL:
1
2
3
SELECT `article`.`id` AS `article_id`, `title`, `content` FROM `article_type` JOIN `article` ON (`article_type`.`article_id` = `article`.`id`) WHERE `article_type`.`type_id` = 1 
AND YEAR(`created_at`) >= YEAR(CURRENT_DATE - INTERVAL 1 MONTH) 
AND MONTH(`created_at`) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH) ORDER BY `created_at` DESC"


Maar die blijft maar 0 rows returnen.

Alvast bedankt!

  • kluyze
  • Registratie: Augustus 2004
  • Niet online
Je moet eens een je query als volgt opstellen:
MySQL:
1
SELECT YEAR(`created_at`), YEAR(CURRENT_DATE - INTERVAL 1 MONTH), MONTH(`created_at`), MONTH(CURRENT_DATE - INTERVAL 1 MONTH), `created_at` FROM `article_type` JOIN `article` ON (`article_type`.`article_id` = `article`.`id`);
En dan kijken of je WHERE voorwaarden juist zijn.

  • ReenL
  • Registratie: Augustus 2010
  • Laatst online: 14-09-2022
Waarom alles opsplitsen zo kan je ook geen indexen gebruiken?

WHERE created_at > CURRENT_DATE - INTERVAL 1 MONTH

  • stategamer
  • Registratie: December 2007
  • Laatst online: 21-05 15:13
kluyze schreef op zaterdag 25 juni 2011 @ 18:46:
Je moet eens een je query als volgt opstellen:
MySQL:
1
SELECT YEAR(`created_at`), YEAR(CURRENT_DATE - INTERVAL 1 MONTH), MONTH(`created_at`), MONTH(CURRENT_DATE - INTERVAL 1 MONTH), `created_at` FROM `article_type` JOIN `article` ON (`article_type`.`article_id` = `article`.`id`);
En dan kijken of je WHERE voorwaarden juist zijn.
Deze query retourneerde ook alle results van die maand daarvoor :/ (maar er zijn results)
ReenL schreef op zaterdag 25 juni 2011 @ 18:48:
Waarom alles opsplitsen zo kan je ook geen indexen gebruiken?

WHERE created_at > CURRENT_DATE - INTERVAL 1 MONTH
Dit deed helaas niets :(

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-05 17:03

NMe

Quia Ego Sic Dico.

Wat heb je voor data dan? Want het opsplitsen zoals je nu doet is inderdaad nogal onzin...

En wat betekent "deed helaas niets"? Geen rows? Fouten? Iets anders? Waarom moeten we elke keer als jij een topic opent alle informatie uit je trekken?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • ameesters
  • Registratie: Juni 2008
  • Laatst online: 05-01-2022
Modbreak:Laat het modereren maar over aan de moderators.

[Voor 86% gewijzigd door NMe op 25-06-2011 19:54]


  • stategamer
  • Registratie: December 2007
  • Laatst online: 21-05 15:13
NMe schreef op zaterdag 25 juni 2011 @ 19:23:
Wat heb je voor data dan? Want het opsplitsen zoals je nu doet is inderdaad nogal onzin...

En wat betekent "deed helaas niets"? Geen rows? Fouten? Iets anders? Waarom moeten we elke keer als jij een topic opent alle informatie uit je trekken?
De data is bestaat uit gewoon text, title, content , en de id.
De query die werd voorgesteld deed niets omdat er geen rows retourneerde .

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-05 17:03

NMe

Quia Ego Sic Dico.

Ik vroeg niet hoe je data eruit ziet, dat kan ik ook wel uit je query halen. Ik vroeg wélke data je hebt.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • stategamer
  • Registratie: December 2007
  • Laatst online: 21-05 15:13
NMe schreef op zaterdag 25 juni 2011 @ 20:15:
Ik vroeg niet hoe je data eruit ziet, dat kan ik ook wel uit je query halen. Ik vroeg wélke data je hebt.
Ik begrijp niet helemaal wat je bedoelt.
Er 7 rijen met data die zonder datum filter wel te zien zijn, als je dat bedoelt?

[Voor 7% gewijzigd door stategamer op 25-06-2011 20:45]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-05 17:03

NMe

Quia Ego Sic Dico.

Welke data (gegevens) staan er in je tabel? Hoeveel rijen interesseert me niet, daar kan ik in zijn geheel niet aan zien waarom jouw WHERE alle data uitfiltert...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • stategamer
  • Registratie: December 2007
  • Laatst online: 21-05 15:13
NMe schreef op zaterdag 25 juni 2011 @ 20:57:
Welke data (gegevens) staan er in je tabel? Hoeveel rijen interesseert me niet, daar kan ik in zijn geheel niet aan zien waarom jouw WHERE alle data uitfiltert...
1 id int(11) Nee Geen AUTO_INCREMENT
2 title varchar(120) latin1_swedish_ci
3 content text latin1_swedish_ci
4 images varchar(500) latin1_swedish_ci
5 created_at datetime
6 updated_at datetime

[Voor 7% gewijzigd door stategamer op 25-06-2011 21:04]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-05 17:03

NMe

Quia Ego Sic Dico.

Ik vroeg niet hoe je datamodel eruit ziet. Ik vroeg niet hoeveel data je hebt. Ik vroeg wélke data je hebt. Wat staat er in je tabel? In je records? De daadwerkelijke gegevens. Je weet wel, het spul dat je in je database stopt... Data.

Ik geef direct toe dat ik niet altijd even duidelijk ben, maar hoe kun je een vraag als "welke data heb je in je tabel staan?" nu fout interpreteren?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Anoniem: 26306

Gozer, het is allemaal niet zo moeilijk. Je begint zonder WHERE clause. Nu krijg je alle rijen terug.
Je wilt alles minder dan een maand oud:

... WHERE created_at > DATE_SUB(CURDATE(), INTERVAL 1 MONTH)

Ga eens gewoon debuggen en ga eens kijken naar de function reference en er gewoon mee spelen. Waarom denk je dat wij het wel kunnen? Omdat we onszelf hebben leren redden.

  • stategamer
  • Registratie: December 2007
  • Laatst online: 21-05 15:13
NMe schreef op zaterdag 25 juni 2011 @ 21:08:
Ik vroeg niet hoe je datamodel eruit ziet. Ik vroeg niet hoeveel data je hebt. Ik vroeg wélke data je hebt. Wat staat er in je tabel? In je records? De daadwerkelijke gegevens. Je weet wel, het spul dat je in je database stopt... Data.

Ik geef direct toe dat ik niet altijd even duidelijk ben, maar hoe kun je een vraag als "welke data heb je in je tabel staan?" nu fout interpreteren?
Als je dit niet bedoelt dan weet ik het ook niet meer :')

object(stdClass)#28 (6) {
["article_id"]=>
string(1) "1"
["title"]=>
string(5) "title"
["content"]=>
string(1002) "

1 orem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque tempor porta tortor venenatis sagittis. Duis facilisis sodales mi, a scelerisque tortor pretium vel. In molestie ultricies rutrum. Fusce ac magna in lectus accumsan dapibus a ut velit. Integer convallis consequat dui, eu molestie eros porta ac. Integer sagittis purus eu dui viverra pretium. Donec eu laoreet leo. Aenean iaculis malesuada est ultrices fermentum. Nam laoreet elit non enim sodales quis accumsan mauris aliquet. Proin non sapien erat, id elementum dolor. Curabitur viverra tristique dolor, quis molestie enim volutpat in. Nullam eu elit dui. Curabitur quis ante elit, eget fringilla orci. Donec id turpis tortor, id accumsan arcu. Quisque accumsan condimentum tincidunt. Vivamus eu lectus diam, tempus luctus ipsum. Donec a augue non arcu pellentesque faucibus. Nullam dictum, mi pellentesque facilisis euismod, purus velit auctor eros, a convallis mi velit non justo.

"
["images"]=>
NULL
["created_at"]=>
string(19) "2011-04-04 15:13:07"
["updated_at"]=>
string(19) "2011-06-04 15:13:07"
}
Anoniem: 26306 schreef op zaterdag 25 juni 2011 @ 21:10:
Gozer, het is allemaal niet zo moeilijk. Je begint zonder WHERE clause. Nu krijg je alle rijen terug.
Je wilt alles minder dan een maand oud:

... WHERE created_at > DATE_SUB(CURDATE(), INTERVAL 1 MONTH)

Ga eens gewoon debuggen en ga eens kijken naar de function reference en er gewoon mee spelen. Waarom denk je dat wij het wel kunnen? Omdat we onszelf hebben leren redden.
Hier heb ik dus al research voor gedaan en uitgeprobeerd, maar het wilde niet lukken.

  • _Sunnyboy_
  • Registratie: Januari 2003
  • Laatst online: 00:10

_Sunnyboy_

Mooooooooooooooooo!

Ik gok dat je gewoon geen records hebt die in de afgelopen maand zijn gemaakt. Doe eens de volgende query en post hier de resultaten.

MySQL:
1
2
3
4
SELECT `article`.`id` AS `article_id`, `title`, `created_at`, `updated_at` 
FROM `article_type` 
JOIN `article` ON (`article_type`.`article_id` = `article`.`id`) 
WHERE `article_type`.`type_id` = 1

Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life


  • stategamer
  • Registratie: December 2007
  • Laatst online: 21-05 15:13
_Sunnyboy_ schreef op zaterdag 25 juni 2011 @ 21:20:
Ik gok dat je gewoon geen records hebt die in de afgelopen maand zijn gemaakt. Doe eens de volgende query en post hier de resultaten.

MySQL:
1
2
3
4
SELECT `article`.`id` AS `article_id`, `title`, `created_at`, `updated_at` 
FROM `article_type` 
JOIN `article` ON (`article_type`.`article_id` = `article`.`id`) 
WHERE `article_type`.`type_id` = 1
object(stdClass)#28 (5) {
["article_id"]=>
string(2) "31"
["title"]=>
string(9) "asdasdasd"
["images"]=>
string(30) "4df9d1b0379571302182575640.jpg"
["created_at"]=>
string(19) "2011-06-16 11:49:36"
["updated_at"]=>
string(19) "2011-06-16 11:49:36"
}

object(stdClass)#31 (5) {
["article_id"]=>
string(2) "30"
["title"]=>
string(23) "Nieuwsbericht met foto."
["images"]=>
string(89) "4df9d0e0ab68eHydrangeas.jpg,4df9d0e15059b1301813675969.jpg,4df9d0e1ae55d1307826121152.jpg"
["created_at"]=>
string(19) "2011-03-16 11:46:09"
["updated_at"]=>
string(19) "2011-06-16 11:46:09"
}

object(stdClass)#28 (5) {
["article_id"]=>
string(2) "14"
["title"]=>
string(20) "Tekst van minimaal 5"
["images"]=>
NULL
["created_at"]=>
string(19) "2011-06-14 15:07:04"
["updated_at"]=>
string(19) "2011-06-14 15:07:04"
}

object(stdClass)#31 (5) {
["article_id"]=>
string(2) "13"
["title"]=>
string(19) "Rustgevend filmpje."
["images"]=>
NULL
["created_at"]=>
string(19) "2011-06-14 14:15:48"
["updated_at"]=>
string(19) "2011-06-14 14:15:48"
}

object(stdClass)#28 (5) {
["article_id"]=>
string(1) "5"
["title"]=>
string(18) "Voorbeeld pagina 1"
["images"]=>
NULL
["created_at"]=>
string(19) "2011-06-08 12:38:15"
["updated_at"]=>
string(19) "2011-06-08 12:38:15"
}

object(stdClass)#31 (5) {
["article_id"]=>
string(1) "2"
["title"]=>
string(11) "Test titel."
["images"]=>
NULL
["created_at"]=>
string(19) "2011-06-04 15:14:45"
["updated_at"]=>
string(19) "2011-06-04 15:14:45"
}

object(stdClass)#28 (5) {
["article_id"]=>
string(1) "1"
["title"]=>
string(5) "title"
["images"]=>
NULL
["created_at"]=>
string(19) "2011-04-04 15:13:07"
["updated_at"]=>
string(19) "2011-06-04 15:13:07"
}

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 30-04 22:35
stategamer schreef op zaterdag 25 juni 2011 @ 18:20:
In mijn Voorbeeld probeer ik vanaf de datum van vandaag (NOW() ) tot die van een maand geleden alles te selecteren.

MySQL:
1
2
3
SELECT `article`.`id` AS `article_id`, `title`, `content` FROM `article_type` JOIN `article` ON (`article_type`.`article_id` = `article`.`id`) WHERE `article_type`.`type_id` = 1 
AND YEAR(`created_at`) >= YEAR(CURRENT_DATE - INTERVAL 1 MONTH) 
AND MONTH(`created_at`) = MONTH(CURRENT_DATE - INTERVAL 1 MONTH) ORDER BY `created_at` DESC"
Vergelijk nog eens wat je vraag is en welke = en >= tekens je gebruikt in je query. Want als je het commentaar van andere posters hier goed leest dan zul je al wat hints zien over wat je verkeerd doet.

[Voor 8% gewijzigd door _js_ op 25-06-2011 21:32]


  • _Sunnyboy_
  • Registratie: Januari 2003
  • Laatst online: 00:10

_Sunnyboy_

Mooooooooooooooooo!

Heb je al gecheckt wat de waarde van CURRENT_DATE is? Misschien staat je klok wel verkeerd?

Doe eens:
MySQL:
1
SELECT CURRENT_DATE as today, CURRENT_DATE - INTERVAL 1 MONTH as one_month_ago

Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 22:20

MueR

Moderator Devschuur®

is niet lief

stategamer schreef op zaterdag 25 juni 2011 @ 21:15:
Hier heb ik dus al research voor gedaan en uitgeprobeerd, maar het wilde niet lukken.
Dan is of je datum verkeerd, of je bent gewoon echt keihard aan het liegen.

SQL:
1
2
3
SELECT COUNT(*) FROM `Pageview`
WHERE `Date` >= DATE_SUB( NOW( ) , INTERVAL 1 MONTH )
-- Returns: 139071


Als standaard functies niet werken, doe jij iets verkeerd. Je created_at kolom is gewoon een datetime, dus daar werkt dit gewoon op.

Anyone who gets in between me and my morning coffee should be insecure.
Breng nu uw applicatie naar de kloot. Dat is veel beter! Nu samen met klootopslag. Voor maar €9,95. Doei doei!


  • stategamer
  • Registratie: December 2007
  • Laatst online: 21-05 15:13
_Sunnyboy_ schreef op zaterdag 25 juni 2011 @ 21:46:
Heb je al gecheckt wat de waarde van CURRENT_DATE is? Misschien staat je klok wel verkeerd?

Doe eens:
MySQL:
1
SELECT CURRENT_DATE as today, CURRENT_DATE - INTERVAL 1 MONTH as one_month_ago
today one_month_ago
2011-06-25 2011-05-25
MueR schreef op zaterdag 25 juni 2011 @ 22:07:
[...]

Dan is of je datum verkeerd, of je bent gewoon echt keihard aan het liegen.

SQL:
1
2
3
SELECT COUNT(*) FROM `Pageview`
WHERE `Date` >= DATE_SUB( NOW( ) , INTERVAL 1 MONTH )
-- Returns: 139071


Als standaard functies niet werken, doe jij iets verkeerd. Je created_at kolom is gewoon een datetime, dus daar werkt dit gewoon op.
COUNT(*)
21

[Voor 39% gewijzigd door stategamer op 25-06-2011 22:21]


  • _Sunnyboy_
  • Registratie: Januari 2003
  • Laatst online: 00:10

_Sunnyboy_

Mooooooooooooooooo!

Dan moet de oplossing die al een tijdje geleden is gepost door Cheatah gewoon werken. heb je dat als eens geprobeerd?
Anoniem: 26306 schreef op zaterdag 25 juni 2011 @ 21:10:
Gozer, het is allemaal niet zo moeilijk. Je begint zonder WHERE clause. Nu krijg je alle rijen terug.
Je wilt alles minder dan een maand oud:

... WHERE created_at > DATE_SUB(CURDATE(), INTERVAL 1 MONTH)

Ga eens gewoon debuggen en ga eens kijken naar de function reference en er gewoon mee spelen. Waarom denk je dat wij het wel kunnen? Omdat we onszelf hebben leren redden.

Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life


  • stategamer
  • Registratie: December 2007
  • Laatst online: 21-05 15:13
_Sunnyboy_ schreef op zaterdag 25 juni 2011 @ 22:23:
Dan moet de oplossing die al een tijdje geleden is gepost door Cheatah gewoon werken. heb je dat als eens geprobeerd?


[...]
Je hebt inderdaad gelijk dit werkt gewoon!
Anoniem: 26306 schreef op zaterdag 25 juni 2011 @ 21:10:
Gozer, het is allemaal niet zo moeilijk. Je begint zonder WHERE clause. Nu krijg je alle rijen terug.
Je wilt alles minder dan een maand oud:

... WHERE created_at > DATE_SUB(CURDATE(), INTERVAL 1 MONTH)

Ga eens gewoon debuggen en ga eens kijken naar de function reference en er gewoon mee spelen. Waarom denk je dat wij het wel kunnen? Omdat we onszelf hebben leren redden.
Heel erg bedankt!
Dit loste mijn probleem op! :D

Bedankt heren!

Anoniem: 82076

stategamer schreef op zaterdag 25 juni 2011 @ 22:31:
[...]


Je hebt inderdaad gelijk dit werkt gewoon!


[...]


Heel erg bedankt!
Dit loste mijn probleem op! :D

Bedankt heren!
Begrijp je ook waarom je originele query niet werkte?
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee