En tricky sql :)
 
blackmamba 10. maj 2011 15:02:12 Pridružen od:
4. mar 2008
559 objav
392 25 11
#1

Npr. vodimo evidenco gostovanj.



V tabeli je v enem stolpcu zapisan obračunski interval v mesecih (npr. plačuje se vsake 3 mesece)

v drugem stolpcu je pa datum pričetka gostovanja (npr. 1.4.2011)



imestranke (VARCHAR)

interval (INT)

datum
zacetka (DATE)



Kako z mysqlom dobiti seznam vseh, ki bodo v roku 5 dni morali plačati gostovanje?

Sliši se simpl, vendar mi povzroča rahle preglavice :)



Jutri bom nadaljeval s tem, upam pa, da do takrat že dobim kak hint oz. rešitev :)


všeč(0) ni všeč(0) spam(0)
 
Vini 10. maj 2011 15:10:07 Pridružen od:
1. sep 2006
6612 objav
5234 611 56
#2
SELECT
ime_stranke
FROM
tabela
WHERE
DATE_ADD(datum_zacetka, INTERVAL `interval` MONTH) < DATE_ADD(CURDATE(), INTERVAL 5 DAY);

Je pa to še kar butasta poizvedba, povsem neoptimizirana in jo je s podatki v tej obliki povsem nemogoče optimizirati. Če imaš strank malo, ali pa če poizvedbe ne poganjaš prav pogosto, načeloma ne bo pretirane panike.


všeč(9) ni všeč(1) spam(0)
 
blackmamba 11. maj 2011 07:45:09 Pridružen od:
4. mar 2008
559 objav
392 25 11
#3

Hvala Vini, ampak tole pade, če je datum začetka več kot en interval časa nazaj.



Npr. imamo 3 mesečni interval, gostovanje je bilo pa začeto pred 2 letoma.



Rešitev je v tem, da datumu pričetka gostovanja prištejemo razliko v intervalih, tako da datum pričetka ni manjši od enega intervala manj kot NOW()



:) matr je tole dobr razloženo :)



DATEADD(datumzacetka, INTERVAL (interval*(SELECT CEILING(perioddiff(dateformat(now(), '%Y%m'), dateformat(datumzacetka, '%Y%m'))/interval

))) MONTH)



Query traja 0.18s na 500 strankah in poganjal se bo 1x dnevno, tako da ni panike.

Se pa strinjam, da bi se dalo bolj optimalno imeti zapisane podatke.


všeč(4) ni všeč(0) spam(0)
 
b00mbar 18. maj 2011 16:51:04 Pridružen od:
18. jun 2008
350 objav
554 127 18
#4

Kaj pa takole?



.... WHERE TODAYS(datumzacetka) - TO_DAYS(NOW()) <= 5


všeč(0) ni všeč(0) spam(0)
Garantirano najhitrejše pure SSD Reseller gostovanje ( PHP7.1, Opcache, Nginx, MariaDB, Let's encrypt) | Brezplačna selitev strani in pošte | 400+ domen po izjemnih cenah
www.neoserv.si
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se