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. */
?>