Concat,PostgreSQL
Elimdeki proje ile uğraşırken bir soruna denk geldim, Aşağıdaki gibi bir sonuç döndüren sorgumun tek satırda almam gerekiyor, ancak name alanlarındaki verileri de kaybetmemem gerekiyordu. Biraz google biraz doküman okuyarak concat aggregate fonksiyonunu buldum ancak bu aggregate fonksiyonu PostgreSQL için yoktu, biraz daha bakınınca dökümanlardan birinde hazır yapılmışına rastladım. Eh burayada koymazsam olmaz sonra unutuyorum ![]()
SELECT name,phone FROM TABLENAME;
name | phone
-----------------+------------------
AAAAAAAF | 9054444333xx
AAAAAFFF | 9054444333xx
SSSSSDDDDAAAF | 9054444333xx
=> CREATE AGGREGATE concat (
(> BASETYPE = text,
(> SFUNC = textcat,
(> STYPE = text,
(> INITCOND = ''
(> );
CREATE AGGREGATE
SELECT CONCAT(name||', ') AS name, phone FROM TABLENAME GROUP BY phone ;
name | phone
------------------------------------------------------------------------------------------+------------------
AAAAAAAF,AAAAAFFF,SSSSSDDDDAAAF | 9054444333xx
Pek bir güzel oldu....
Pek bir güzel
Daha önceki symfony versiyonlarında olmayan yeni bir özelliği keşfettim (aferim bana) geç fark etmemin en büyük nedeni undocumented olması imiş. Hemen kısaca bahsedeyim eğer iki adet farklı Veri tabanına ihtiyacınız var ise databases.yml içerisiniş azıcık düzelterek istediğimiz gibi bağlanabiliyoruz.
all:
propel:
class: sfPropelDatabase
param:
dsn: pgsql://myuser:mypass@localhost/mydb
is_default: yes
mysql:
class: sfPropelDatabase
param:
dsn: mysql://myuser:mypass@localhost/mydb
Artık her istekte sadece tek bir veri tabanı bağlantısı açılacak diğer veri tabanı üzerinde bir sorgu yapmamız gerektiği zaman bağlanılacak. (sistem kaynaklarını düzenli kullanalım değilmi ama
) Bunun için ise eğer Criteria sınıfını kullanacaksak $c = new Criteria(’mysql’); diyerek mysql ismini verdiğimiz bağlantı üzerinden bu işlemi gerçekleştireceğimizi belirtiyoruz ki DB bağlantısı açılsın ve sorgumuz mySQL üzerinde koşsun. Aksi halde default olarak belirttiğimiz propel isimli DB bağlantısı üzerinde koşacak sorgumuz. Peki ya Criteria değilde özel SQL yazıyorsak ne olacak? İşte o vakitte $con = Propel::getConnection(’mysql’); diğerek Bağlantımızın mysql ismini verdiğimiz bağlantı paramatreleri ile koşacağını belirtmiş oluyoruz. Pek bir güzel. Ha ne işimize yarayacak derseniz benim hayatımı kolaylaştırdı, sizinki size kalmış.
(Yazar) Sevgili günlük..
(Günlük) Efendim?
(Yazar) Aşık diyorum, olmak diyorum, lazım diyorum.
(Günlük) Sen diyorum, ne diyorum, istediğini, diyorum bilmiyorsun, diyorum.
Merak işte
Günün birinde bir PostgreSQL veri tabanında ki bir tablonun disk üzerinde kapladığı alanı merak ederseniz şu SQL sorgusunu çalıştırın;
select pg_total_relation_size('tablename');
Aferim... akıllı çocuk...
Buda lazım tabii…
Bir alandaki tekrar eden verilerin hangileri olduğunu öğrenmek istiyorsunuz diyelim ne yaparsınız?
işte aşağıdaki gibi bir sorgu yazarsınız,
SELECT
dates
FROM reports
GROUP BY dates
HAVING ( COUNT(dates) > 1 )
çalıştırırsınız sonrada dadından yinmez....