Keresés

Új hozzászólás Aktív témák

  • Sk8erPeter

    nagyúr

    válasz Speeedfire #9180 üzenetére

    where bday >= '1982-08-17' and bday<='1950-02-14'
    Csak azt magyarázd el nekem, hogyan fog valaha is teljesülni az, hogy egy dátum 1982-nél későbbi, de 1950-nél korábbi! :DD

    Ja hogy a kliens pontos ideje kell (tehát a látogató szerinti idő), azt előbb nem írtad, így érthető.

    Én a helyedben ezt a számolgatást inkább az adatbázisra bíznám, ha már úgyis onnan kellenek az adatok. Bár ez megint hitkérdés, mert a query cache szempontjából lehet, hogy jobb, ha inkább PHP-ra bízod a számolást.

    Na de abból már eleve ki lehet indulni, hogy a MySQL-ben nagyon egyszerűen lehet egyszerű intervallumokat számolni, lásd pl. ezt:

    SELECT DATE_SUB( NOW(), INTERVAL 60 YEAR );

    Eredménye épp most:
    1952-04-08 19:41:06

    Most leteszteltem az intervallumokra egy teszttáblával és néhány tesztadattal, úgy, hogy az ezelőtt 30-60 évvel születettekre vagyok kíváncsi, ez lesz az intervallum, a teszttáblával tök jól működött:

    Táblastruktúra:

    CREATE TABLE IF NOT EXISTS `test_dates` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `my_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_hungarian_ci AUTO_INCREMENT=10 ;

    INSERT INTO `test_dates` (`id`, `my_date`) VALUES
    (1, '2012-04-08 16:52:36'),
    (2, '2012-02-06 10:00:00'),
    (3, '2012-01-09 11:36:00'),
    (4, '2011-01-09 08:00:49'),
    (5, '1981-07-07 22:00:00'),
    (8, '1972-03-14 23:33:00'),
    (9, '1978-04-04 16:00:00');

    A query az intervallumokkal:

    SET @now = NOW( );
    SET @interval_start = 30;
    SET @interval_end = @interval_start + 30;
    SET @date_first = DATE_SUB( @now , INTERVAL @interval_end YEAR );
    SET @date_second = DATE_SUB( @now , INTERVAL @interval_start YEAR );

    SELECT * FROM `test_dates`
    WHERE
    `my_date` >= @date_first
    AND
    `my_date` < @date_second
    ORDER BY `my_date` ASC;

    Nálam "a lekérdezés 0.0221 másodpercig tartott".

Új hozzászólás Aktív témák

Hirdetés