Kategori: PHP & MySQL Yorumlar: 7 8799 Okunma
ŞUB 12
MySQL

Herkesin bilmesi gereken faydalı MySQL fonksiyonları

Bu yazımda sizlere bazı çok yararlı, hayatınızı kolaylaştıracak, fazla kod yazmaktan kurtaracak ve kısmen programlarınızı hızlandıracak olan MySQL fonksiyonlarını paylaşacağım.

Bir PHP programcısı olarak sürekli MySQL ile karşılaşırsınız. Yeni başlayanların bilmediği, MySQL'in bazı durumlarda PHP'den daha hızlı çalışan birçok fonksiyon içerdiği. Yeni Programcılar, MySQL sorgularını çoğunlukla basit SELECT ve INSERT sorgularıyla kısıtlar, verileri veritabanından alıp PHP'de işlerler.

PHP'de yaptığınız çoğu işi MySQL ile hem daha basit yapabilir, hemde performansı artırabilirsiniz.


CONCAT
Concat, Concatenate'nin kısaltılışıdır, bağlamak anlamına gelir. Concat bir string fonksiyonudur ve veritabanı alanlarını birbirine bağlamanıza yarar. Hemen bir örnek verelim:
SELECT CONCAT(isim, ' ', soyisim) AS isim FROM tablo


DATE_FORMAT
Ingilizce formatındaki veya TIMESTAMP formatındaki bir tarihi istediğiniz bir şekilde almanıza yarayan fonksiyon.
SELECT DATE_FORMAT(tarih, '%d.%m.%Y') as tarih FROM tablo
Bu şekilde formatı 2012-02-23 16:37:35 olan tarihi 23.02.2012 şeklinde almış olduk.


IF
MySQL'de aynı PHP gibi IF-deyimini desteklemekte. Örneğin üyelerin sitemize kayıt olup daha sonra mail ile hesaplarını aktifleştirmeleri gereken bir sitemiz olduğunu varsayalım. Bunları bir grafikle ayıralım, mesela yeşil ve kırmızı nokta ile. Klasik yöntemle şu şekilde hallederdik:
while ($row = mysql_fetch_array($result)){
	if($row['durum'] == 1){
		echo '<img src="aktif.png" />';	
	}elseif($row['durum'] == 0){
		echo '<img src="pasif.png" />';	
	}
}
Aynı işlemi MySQL ile yapalım:
SELECT IF(durum=1, 'aktif.png', 'pasif.png') AS durum FROM tablo
Daha sonra basit bir şekilde kullanabiliriz
while($row = mysql_fetch_array($result)){
	echo '<img src="' . $row['durum'] . '" />';
}
MySQL IF fonksiyonunda 1. parametre TRUE veya FALSE olduğunu belirler. Eğer TRUE ise 2. parametre döndürülür, yoksa 3. parametre.


IN
Eğer SQL sorgunuzda birden fazla WHERE koşulu belirleyecekseniz imdadınıza bu fonksiyon yetişiyor. Normalde bu şekilde yazdığınız SQL sorgusunu
SELECT isim FROM tablo WHERE meslek = 'Programcı' OR meslek = 'Avukat' OR meslek = 'Doktor'
daha basit ve kısa bir şekilde yazabilirsiniz.
SELECT isim FROM tablo WHERE meslek IN('Programcı', 'Avukat', 'Doktor')


INET_ATON ve INET_NTOA Bu fonksiyonlar PHP'nin ip2long ve long2ip fonksiyonlarına eşdeğer. IP4 adresini bir integer'a çevirmeye, veya bir integer'ı IP adresine çevirmeye yarar. Ilk bakışta gereksiz gibi düşünebilirsiniz fakat büyük uygulamalarda MySQL'i rahatlatır.

IP adreslerini integer olarak kaydetmek için MySQL'da veri tipini INT UNSIGNED olarak seçiniz, aksi taktirde geri dönüştürmede sorun yaşayabilirsiniz.

Hemen örneklerle devam edelim. IP adresini integer olarak kaydetmek için ihtiyacınız olan sorgu:
INSERT INTO tablo (ip) VALUES (INET_ATON('127.0.0.1'))
Integer olarak kaydettiğinizi okumak:
SELECT INET_NTOA(ip) as ip FROM tablo
Neden IP adresini doğrudan VARCHAR olarak kayıt etmiyoruz da, böyle INT olarak kaydediyoruz? Birincisi IP adresleri INT değerinden daha fazla disk alan harcıyor. İkincisi ve daha önemli olan nedeni, INT değerleri veritabanında diğer veri tiplerinden önemli ölçüde daha hızlı sorgulanıyor. Kayıt edilen veri türüne göre VARCHAR, TEXT veya hatta BLOB'dan 100 kata kadar daha hızlı sorgulama yapar. Özellikle log tutma, tracking gibi IP adresini fazlalıkla saklamanız gereken uygulamalarda gözle görülür bir şekilde fark ediyor.


REPLACE
Kimin aklına hemen PHP'nin str_replace fonksiyonu aklına gelmedi? Haksız değilsiniz, zira MySQL'in REPLACE fonksiyonu benzer bir şekilde çalışıyor. Fazla açıklamaya gerek yok, sorgu herşeyi açıklar.
SELECT REPLACE('renk', 'Siyah', 'Beyaz') AS FROM tablo 
Aynı IF fonksiyonunda olduğu gibi REPLACE'de 3 parametre girmenizi bekliyor. Bunlardan birincisine değişmesini istediğiniz alanı yazıyorsunuz, ikincisine hangi kelimeyi değiştirmek istiyorsanız, üçüncüsüne ise hangi kelimeye değiştirilmesini istiyorsanız onu yazıyorsunuz.

Uzun süre sonraki ilk dersimdi, umarım yararlı olur, bir dahaki dersimde görüşmek üzere.

Oylama: 2.4/5 (Toplam 150 oy)


Mad Gemini (5 yıl önce)
#1
Başlığa uygun bir içerik olmuş. Gerçekten faydalı fonksiyonlar. Teşekkürler :)
Hüseyin (5 yıl önce)
#2
Rica ederim, işinize yaradıysa ne mutlu bana :)
yns (5 yıl önce)
#3
SELECT DATE_FORMAT(tarih, '%d.%m.%Y') as tarih FROM tablo

şeklinde mysqlede tablo oluşturduk diyelim..

peki bunu nasıl yazdıracağız ?

Hüseyin Koyun (5 yıl önce)
#4
MySQL veritabanı ile bağlantı oluşturduğunu varsayarsak;

<?php
$result = mysql_fetch_array(mysql_query("SELECT DATE_FORMAT(tarih, '%d.%m.%Y') as tarih FROM tablo"));
echo $result['tarih']; ?>
sacide (5 yıl önce)
#5
hocam biraz daha açıklarsanız çok sevinirim
Hüseyin Koyun (5 yıl önce)
#6
anlamadığınız nedir? ona göre açıklayayım?
Fatih (4 yıl önce)
#7
REPLACE'i UPDATE yerine kullanabilir miyiz ? ne farkı var ikisinin ?

Teşekkürler. Çok yararlı bir makale olmuş.

Yorum yap