select floor(5.89999999) => 5
select format(5.19999999,2) => 5.20
Mysql LEFT | Right Join ile tablo birleştirmek
daha önce normal tablo birleştirmeyi http://www.mehmetmutlu.com.tr/2010/06/06/mysql-ile-birden-fazla-tablolar-ile-calismak/ bağlantıdaki makalemde anlatmıştım ancak, o anlatılan örnekde sadece eşleşen verileri listeliyorduk eğer bize meslek ği olmayan bir veri gelirse listelemiyecekti bunuda mysq de join ile yapıyoruz.
Select kisiler.id,kisiler.adı,meslekler.adı from kisiler left join meslekler on kisiler.meslek= meslekler.id
dediğimiz zaman ise eğer meslek karşılığı yok ise null olarak dönecektir
MySql ile birden fazla tablolar ile çalışmak
kisiler(id(int),adı(char50),meslegi(int))
meslekler(id,adı(char50))
adında 2 adet tablomuz olsun
örnek 1.
select * from kisiler,meslekler where kisiler.meslegi = meslekler.id
dersek mysql bize
kisiler.id | kisiler.adı | kisiler.meslegi | meslekler.id | meslekler.adı
adında sadece “kisiler.meslegi = meslekler.id” eşleşen verileri listemiş olacak
ancak bize sadece
kisi id , kisi adı ve mesleği gerekiyorsa ise
select kisiler.id,kisiler.adı,meslekler.adı from kisiler,meslekler where kisiler.meslegi = meslekler.id
komutunu uyğulayıp mysql veri çıktısını select * değilde manual kısıtlamış oluyoruz böylece gereksiz veriden kurtulup performansın artmasına katkıda bulunuyoruz.
Merak Mail Server’de Mail Gönderim Limitleri
El ile tek tek tüm userlere limit belirliyebiliriz ancak otomatik sabit bir değer tanımlıyamıyoruz ancak
mysql trigger kullanarak bunu sabitleştirmek mümkün…
Öncelikle Global ayarlardan domain limitlendirme ve user limitlendirme özelliğini açıyoruz
ardından merak mail in bağlı oldugu veritabanına gidip aşağıdaki sql konudu çalıştırıyoruz. (mysql5.0 ve üzeri)
Domain limitlendirme trigger’i
DROP TRIGGER IF EXISTS ‘update_domain';
DROP TRIGGER IF EXISTS ‘insert_domain';
CREATE TRIGGER ‘update_domain’ BEFORE UPDATE ON ‘domains’
FOR EACH ROW BEGIN
IF new.D_NumberLimit = 0 OR new.D_NumberLimit = 1000 THEN
SET new.D_NumberLimit = 1000;
END IF;
END;
CREATE TRIGGER ‘insert_domain’ BEFORE INSERT ON ‘domains’
FOR EACH ROW BEGIN
IF new.D_NumberLimit = 0 OR new.D_NumberLimit = 1000 THEN
SET new.D_NumberLimit = 1000;
END IF;
END;
User leri limitlendirme triggeri
DROP TRIGGER IF EXISTS ‘update_user';
DROP TRIGGER IF EXISTS ‘insert_user';
CREATE TRIGGER ‘update_user’ BEFORE UPDATE ON ‘users’
FOR EACH ROW BEGIN
IF new.U_NumberSendLimit = 0 OR new.U_NumberSendLimit = 250 THEN
SET new.U_NumberSendLimit = 250;
END IF;
END;
CREATE TRIGGER ‘insert_user’ BEFORE INSERT ON ‘users’
FOR EACH ROW BEGIN
IF new.U_NumberSendLimit = 0 OR new.U_NumberSendLimit = 250 THEN
SET new.U_NumberSendLimit = 250;
END IF;
END;
Bu 2 adet trigger i merak mail mysql import ettikden sonra domain bazlı 100 user bazlı 250ser adet limit olacak bu andan itibaren tüm güncelleme ve ekleme işlemlerinde aktif olacak not: triggerde merak mail de 0 değer girişmiş ve otomatik 250 user için domain içinde 1000 e değiştirecek kendimiz farklı bir limit istiyor isek 100, 500, 1500 vs o zaman trigger pasif olacaktır.
MySQL de sütun içerisindeki JSON Array verisi içerisinde arama yapmak?
<?php
$name = 7; /*aranacak array verisinin değerleri*/
$uzunluk = strlen($name)+4;/*$name değişkeninin satır uzunluğu ve aranacak kelime olan “$name”:” şeklindeki satırın toplam uzunluğu, $name değişkenini atarsak “”:” kalıyor bununda toplam uzunluğu 4′ tür*/
$sql = ‘SELECT * FROM ‘tablo’ WHERE SUBSTRING(‘sutunadi’, INSTR(‘sutunadi’, ‘”$name”:”‘)+$uzunluk, (LOCATE(‘”‘, ‘sutunadi’, INSTR(‘sutunadi’, ‘”$name”:”‘)+$uzunluk)-(
INSTR(‘sutunadi’, ‘”$name”:”‘)+$uzunluk)))<=10000000‘;
/* böylece ‘tablo’ içerisinde ‘sutunadi’ sütununda “$name”:”*” * yerine olan kısmın 10000000 den küçük olduğu veriler listelencektir. */
?>