MySQL timeAgo Fonksiyonu
Daha önce PHP için timeAgo fonksiyonu paylaşmıştım. Bu fonksiyon ne yapıyordu? Bir tarih veriyordunuz şu formatta Y-m-d H:i:s
ve oda size 2 gün önce, 3 saat önce, 1 yıl önce gibi sonuç döndürüyordu.
Bunun aynısını PHP kullanmadan bir MySQL fonksiyonu olarak nasıl yazarız? İşte size yazılmış bir fonksiyon örneği.
DELIMITER $$
DROP FUNCTION IF EXISTS `timeAgo`$$
CREATE FUNCTION `timeAgo`(zaman DATETIME) RETURNS VARCHAR(100) CHARSET utf8
BEGIN
DECLARE sonuc VARCHAR(100) DEFAULT '';
DECLARE fark INT(11);
SELECT UNIX_TIMESTAMP() - UNIX_TIMESTAMP(zaman) INTO fark;
IF fark > 60 * 60 * 24 * 7 * 4 * 12
THEN SELECT CONCAT(ROUND(fark / 60 / 60 / 24 / 7 / 4 / 12), " yıl önce") INTO sonuc;
ELSEIF fark > 60 * 60 * 24 * 7 * 4
THEN SELECT CONCAT(ROUND(fark / 60 / 60 / 24 / 7 / 4), " ay önce") INTO sonuc;
ELSEIF fark > 60 * 60 * 24 * 7
THEN SELECT CONCAT(ROUND(fark / 60 / 60 / 24 / 7), " hafta önce") INTO sonuc;
ELSEIF fark > 60 * 60 * 24
THEN SELECT CONCAT(ROUND(fark / 60 / 60 / 24), " gün önce") INTO sonuc;
ELSEIF fark > 60 * 60
THEN SELECT CONCAT(ROUND(fark / 60 / 60), " saat önce") INTO sonuc;
ELSEIF fark > 60
THEN SELECT CONCAT(ROUND(fark / 60), " dakika önce") INTO sonuc;
ELSEIF fark > 0
THEN SELECT CONCAT(fark, " saniye önce") INTO sonuc;
ELSE
SELECT "az önce" INTO sonuc;
END IF;
RETURN sonuc;
END$$
DELIMITER ;
Bir kere çalıştırdıktan sonra artık veritabanınızda saklanacaktır bu fonksiyon. SELECT işlemlerinde kullanırken ise şöyle kullanabilirsiniz;
SELECT user_name, timeAgo(user_date) as date FROM users
Örnek çıktı ise şöyle gözükür;
admin 633 gün önce
Dgc'Blessed 632 gün önce
wtf human 630 gün önce
Umrtrm 621 gün önce
tcelenkk 621 gün önce
haisenberg 618 gün önce
nazlı aaaaa 618 gün önce
Bugraturemis 610 gün önce
erdem 601 gün önce
melihfurkan96 601 gün önce
orkuncaylar 600 gün önce
emredeger 600 gün önce
beyzatrix 600 gün önce
YusufBaba 599 gün önce
murat 598 gün önce
dizimek 594 gün önce