[PHP] Verwijderen wanneer het ouder is dan een maand

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Dutchmega
  • Registratie: September 2001
  • Niet online
ik heb een probleempje, bij het gebruikersysteem dat ik gebruik wil ik dat alle gebruikers die nog niet geactiveerd zijn en ouder zijn dan 1 maand verwijderen maar het probleem is dat ik werk met een vreemde datum.
Namelijk dit:

$sqldate= date("YmdHi");

of bijv. de uitkomst: 200210231422

En dan werkt de volgende code niet meer:

code:
1
2
3
$dateouts=1000;
 $dateout=$sqldate-$dateouts;
 @mysql_query("DELETE FROM admin WHERE datum<$dateout") or user_error (sqlerror());


Als de maand nou bijv 01 is en als je dan min 1 gaat doen (1000) en dan klopt het al niet meer....
Moet ik de datum omvormen tot een datum wat je wel makkelijk kunt - hoe zeg je dat? - verrekenen.

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

wat dacht je van de MySQL date and time functions? http://www.mysql.com/doc/

Leer rekenen met MySQL. 't kan niet alleen maar selecten, maar ook bewerken van data.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Dutchmega
  • Registratie: September 2001
  • Niet online
Ik ben geen newbie dus die dingen weet ik allemaal wel maar het gebruikerssysteem bestaal al en zit vol dus ik kan niet van datum gaan veranderen.

Acties:
  • 0 Henk 'm!

  • Dutchmega
  • Registratie: September 2001
  • Niet online
En het rekenen moet in PHP gebeuren, niet MySQL :)

Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 17-09 07:50

momania

iPhone 30! Bam!

Dutchmega schreef op 27 November 2002 @ 16:11:
Ik ben geen newbie dus die dingen weet ik allemaal wel maar het gebruikerssysteem bestaal al en zit vol dus ik kan niet van datum gaan veranderen.
Hij bedoelt ook in je query tijdelijk converteren om mee te rekenen...

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

  • KnEuTeR
  • Registratie: Mei 2000
  • Laatst online: 24-02-2024

KnEuTeR

iedereen heeft een handelsmerk

juist,

date moet er wel zo uitzien: 2001-08-29
en in een kolom met type DATE

anders kan je MySQL er niet automatisch mee laten "rekenen"

en dat noemt zich geen n00b :X :P nofi ;)

[ Voor 16% gewijzigd door KnEuTeR op 27-11-2002 16:16 ]

Computers ain't that smart, Whatever man built could be taken apart


Acties:
  • 0 Henk 'm!

  • Sjab-X
  • Registratie: September 2001
  • Laatst online: 26-06-2024
Ik zou eens goed kijken naar mktime en date....

Acties:
  • 0 Henk 'm!

Verwijderd

Kun je niet gewoon
PHP:
1
2
$monthago = mktime(date("H"),date("i"),0,date("m")-1,date("d"),date("Y"));
@mysql_query("DELETE FROM admin WHERE UNIX_TIMESTAMP(datum) < $monthago") or user_error (sqlerror());


doen?

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

KnEuTeR:
en dat noemt zich geen n00b :X :P nofi ;)

ondanks je 'nofi', gelieve dit soort opmerkingen voor je te houden.
Sjab-X:
Ik zou eens goed kijken naar mktime en date....
Niet dus. Toch vervelend dat ik 't nou alsnog voor moet gaan kauwen :P

zie ook...
code:
1
2
3
4
DELETE FROM
   tabel
WHERE
   date_field < DATE_SUB(NOW(), INTERVAL 1 MONTH)


't is echt zo moeilijk niet, hoor, die manual lezen

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Dutchmega
  • Registratie: September 2001
  • Niet online
KnEuTeR schreef op 27 november 2002 @ 16:14:
juist,

date moet er wel zo uitzien: 2001-08-29
en in een kolom met type DATE

anders kan je MySQL er niet automatisch mee laten "rekenen"

en dat noemt zich geen n00b :X :P nofi ;)
Dat is stomme onzin want MySQL kan gemakkelijk met allerlei datums, waaronder mijne, rows sorteren.
Verwijderd schreef op 27 november 2002 @ 16:26:
Kun je niet gewoon
PHP:
1
2
$monthago = mktime(date("H"),date("i"),0,date("m")-1,date("d"),date("Y"));
@mysql_query("DELETE FROM admin WHERE UNIX_TIMESTAMP(datum) < $monthago") or user_error (sqlerror());


doen?
Dat zou wel goed kunnen, ik draai gewoon de dates om en dat zou misschien kunnen. Tenminste, als MySQL weet dat het maanden zijn... en dat laatste lijkt me sterk...
drm schreef op 27 November 2002 @ 16:33:

[...]

ondanks je 'nofi', gelieve dit soort opmerkingen voor je te houden.

[...]

Niet dus. Toch vervelend dat ik 't nou alsnog voor moet gaan kauwen :P

zie ook...
code:
1
2
3
4
DELETE FROM
   tabel
WHERE
   date_field < DATE_SUB(NOW(), INTERVAL 1 MONTH)


't is echt zo moeilijk niet, hoor, die manual lezen
Ik snap niet veel van de code, kun je het uitleggen?

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Dutchmega:
Ik snap niet veel van de code, kun je het uitleggen?

Ik wil 't wel proberen :)

code:
1
2
3
4
5
6
7
8
9
1. DELETE FROM       
2.   tabel          
3. WHERE 
4.   date_field
5.   <
6.   DATE_SUB(
7.      NOW(),
8.      INTERVAL 1 MONTH
9.   )

Regels 1 t/m 4 snap je wel neem ik aan.
r.5 < Datum moet kleiner zijn (eerder vallen dan)
r.6 DATE_SUB We gaan een datum creeeren door van de volgende datum...
r.7 NOW() nu. Genereert datum en tijd van vandaag, nu
r.8 INTERVAL 1 MONTH 1 maand af te trekken.

Kortom, je stelt als voorwaarde dat date_field 1 maand eerder moet vallen dan NOW().

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Dutchmega
  • Registratie: September 2001
  • Niet online
Maar is dat dan hetzelfde als ong. 200210231422?

(date("YmdHi");)

[ Voor 18% gewijzigd door Dutchmega op 27-11-2002 17:03 ]


Acties:
  • 0 Henk 'm!

  • Dutchmega
  • Registratie: September 2001
  • Niet online
De query "SELECT * FROM `admin` WHERE datum<DATE_SUB(NOW(), INTERVAL 1 MONTH)"
geeft een error aan: You have an error in your SQL syntax near 'INTERVAL1 MONTH ) LIMIT 0, 80' at line 1

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Dat zal ongetwijfeld ongeveer hetzelfde zijn, maar je moet je bedenken dat MySQL niet voor niets die functionaliteit biedt om met datums* en tijden te rekenen. Als je php code gaat gebruiken voor dingen die je ook in je SQL queries kunt verwerken, waarom zou je het jezelf dan moeilijker maken? Mijns inziens moet je PHP helemaal niet laten bemoeien met dit soort zaken, wanneer je het gewoon met MySQL afkan.

Ga bijvoorbeeld maar na, je moet een keer een dergelijke query uitvoeren, zonder dat je in PHP zit, wat dan? Dan moet je gaan zitten frutselen met systray-klok, dubbelklik, hmmm wat zou de datum zijn, ho, tikfout, etcetera....

Ga er dus maar van uit dat je aan SQL over moet laten, waar het voor gemaakt is: het uitlezen en manipuleren van de data (gegevens dus ;)* binnen je database. Ik weet niet wat de definitie is van de toepassing van SQL maar het zal ongetwijfeld iets in die richting zijn.

*) data is zo verwarrend in dit verband :z ;)

edit:
Je vergeet de editknop :/
De query "SELECT * FROM `admin` WHERE datum<DATE_SUB(NOW(), INTERVAL 1 MONTH)"
geeft een error aan: You have an error in your SQL syntax near 'INTERVAL1 MONTH ) LIMIT 0, 80' at line 1
tja, zoek de verschillen:
code:
1
2
3
INTERVAL 1 MONTH
en
INTERVAL1 MONTH

[ Voor 17% gewijzigd door drm op 27-11-2002 17:13 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Dutchmega
  • Registratie: September 2001
  • Niet online
EN nu mijn tweede vraag :)

edit :P

Ik voer in INTERVAL 1 maar er komt uit INTERVAL1 :?

[ Voor 57% gewijzigd door Dutchmega op 27-11-2002 17:14 ]


Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 17-09 07:50

momania

iPhone 30! Bam!

Dutchmega schreef op 27 November 2002 @ 17:12:
geeft een error aan: You have an error in your SQL syntax near 'INTERVAL1 MONTH ) LIMIT 0, 80' at line 1
spatie ?

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

  • Dutchmega
  • Registratie: September 2001
  • Niet online
Ik voer in INTERVAL 1 maar er komt uit INTERVAL1 |:(

Edit:

PHPMyAdmin doet dat, waarom? Geen idee :?
En als ik in een PHP pagina dat doe, komt er niets uit.....

Edit2:
Terwijl er wel oude accounts zijn...

[ Voor 66% gewijzigd door Dutchmega op 27-11-2002 17:19 ]


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Geef eens de volledige Query die je nu gebruikt...

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 18-09 16:51
ook je insert query.

Acties:
  • 0 Henk 'm!

  • Dutchmega
  • Registratie: September 2001
  • Niet online
DIe heb ik al gegeven: "SELECT * FROM `admin` WHERE datum<DATE_SUB(NOW(), INTERVAL 1 MONTH)"

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Dutchmega schreef op 27 November 2002 @ 20:52:
DIe heb ik al gegeven: "SELECT * FROM `admin` WHERE datum<DATE_SUB(NOW(), INTERVAL 1 MONTH)"
Sorry ik zie het...

In ieder geval, deze query gaat gewoon goed bij mij in PHPMyAdmin. Is datum wel een date field? :?

Of gebruik je soms een heel oude versie van MySQL?

Programmer - an organism that turns coffee into software.


  • Dutchmega
  • Registratie: September 2001
  • Niet online
Mysql en phpmyadmin zijn bij mij nieuw dus daar ligt het niet aan.
Misschien omdat de veld datum een varchar is, dat heb ik gedaan omdat deze datum anders is dan de mysqldatums enzo.

Als ik van het veld 'datum' date maakt, doet hij het nog steeds niet en geeft nog steeds dezelfde error

[ Voor 23% gewijzigd door Dutchmega op 28-11-2002 12:41 ]


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Wat als je een dergelijke query uitvoert op de mysql console?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Verwijderd

LuCarD schreef op 28 november 2002 @ 11:27:
[...]


Sorry ik zie het...

In ieder geval, deze query gaat gewoon goed bij mij in PHPMyAdmin. Is datum wel een date field? :?

Of gebruik je soms een heel oude versie van MySQL?
dit maakt niet uit, want anders geeft MySQL de error: Could Not Find Column: Date_Field

ofzoietsdergelijks

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op 28 november 2002 @ 13:54:
[...]


dit maakt niet uit, want anders geeft MySQL de error: Could Not Find Column: Date_Field

ofzoietsdergelijks
Nee hoor....

net ff getest. Hij zegt gewoon query error
code:
1
select * from test where niet_bestaande_functie()

Programmer - an organism that turns coffee into software.


  • Dutchmega
  • Registratie: September 2001
  • Niet online
okeoke, maakt niet uit maar wat is dan de goede code?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

drm schreef op 28 november 2002 @ 12:43:
Wat als je een dergelijke query uitvoert op de mysql console?

:?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Dutchmega
  • Registratie: September 2001
  • Niet online
"SELECT * FROM `admin` WHERE datum<DATE_SUB(NOW(), INTERVAL 1 MONTH)" werkt niet, wat werkt dan wel?

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

*zucht* Wat voor error/waarschuwing/uitvoer krijg je, als je het op de mysql console uitvoert?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Dutchmega
  • Registratie: September 2001
  • Niet online
Ik moet hier zuchten.... de error heb ik al gegeven, de errors zijn allemaal hetzelfde.....

You have an error in your SQL syntax near 'INTERVAL1 MONTH ) LIMIT 0, 80' at line 1

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

mkay, en probeer eens gewoon
code:
1
SELECT DATE_SUB('2002-12-28', INTERVAL 1 MONTH)
wat dan?

edit:
Overigens is het op zijn minst vreemd te noemen dat je een foutmelding terugkrijgt waarin 'LIMIT 0,80' staat, terwijl dat niet in je query voorkomt...

[ Voor 46% gewijzigd door drm op 28-11-2002 20:30 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • KneoK
  • Registratie: December 2001
  • Laatst online: 01:21

KneoK

Not in a million lightyears

Dutchmega schreef op 28 November 2002 @ 15:32:
"SELECT * FROM `admin` WHERE datum<DATE_SUB(NOW(), INTERVAL 1 MONTH)" werkt niet, wat werkt dan wel?
Misschien een hele domme opmerking hoor, maar gebruik je niet de verkeerde quote-jes ??? Om admin heen zie ik de quote-jes die onder de tilde zit ( ` ) terwijl je normale moet gebruiken, dus die onder de aanhalingstekens ( ' ).

Zo vreselijk thuis ben ik nog niet in SQL maar als ik een query uitvoer (in een MySQL admin panel) met deze ` quote-jes dan krijg ik ook een foutmelding (een andere dan jij, maar toch).

[ Voor 20% gewijzigd door KneoK op 29-11-2002 15:57 ]


Acties:
  • 0 Henk 'm!

  • me1299
  • Registratie: Maart 2000
  • Laatst online: 21:55

me1299

$ondertitel

BioWEB schreef op 29 November 2002 @ 15:53:
[...]


Misschien een hele domme opmerking hoor, maar gebruik je niet de verkeerde quote-jes ??? Om admin heen zie ik de quote-jes die onder de tilde zit ( ` ) terwijl je normale moet gebruiken, dus die onder de aanhalingstekens ( ' ).
`` maakt phpmyadmin ook gebruik van. Ik denk dat dat wel zal werken.

Het maakt eigenlijk niet uit wat je bewuste geest doet, omdat je onderbewuste automatisch precies dat doet wat het moet doen


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1