MSSQL De Çalışan Kodu MYSQL Cevirme
-
merhaba müritler
DECLARE @tbl TABLE ( sPersonelID varchar(20), sAdiSoyadi varchar(20), sKimlikNo varchar(20), SaatUcret FLOAT, Kesintiler FLOAT, CalisilanGun FLOAT, BrutMaas FLOAT, NetMaas FLOAT ) INSERT INTO @tbl SELECT sPersonelID, upper(dbo.Turkce_Kaldir(sAdiSoyadi)) as sAdiSoyadi,sKimlikNo,sSaatUcret,0,0,0,0 FROM tbPersonel where sdurum=1 UPDATE @tbl SET CalisilanGun = (SELECT sum(sCalismaSaat) FROM tbCalisma x WHERE t.sPersonelID = x.sPersonelID and MONTH(sCalismaTarih)=MONTH(convert([date], GETDATE(), 103)) and year(sCalismaTarih)=year(convert([date], GETDATE(), 103))) FROM @tbl t UPDATE @tbl SET Kesintiler = (SELECT sum(sAvansTutar) FROM tbAvans x WHERE t.sPersonelID = x.sPersonelID and MONTH(sAvansTarih)=MONTH(convert([date],GETDATE(), 103)) and year(sAvansTarih)=year(convert([date], GETDATE(), 103))) FROM @tbl t UPDATE @tbl SET BrutMaas = CalisilanGun * SaatUcret FROM @tbl t UPDATE @tbl SET NetMaas=BrutMaas-(CASE WHEN Kesintiler IS NULL THEN '0' ELSE Kesintiler END) FROM @tbl t SELECT sAdiSoyadi,sKimlikNo, (CASE WHEN Kesintiler IS NULL THEN '0' ELSE Kesintiler END) as Kesintiler, (CASE WHEN CalisilanGun IS NULL THEN '0' ELSE CalisilanGun END) as CalisilanGun, (CASE WHEN BrutMaas IS NULL THEN '0' ELSE BrutMaas END) as BrutMaas, (CASE WHEN NetMaas IS NULL THEN '0' ELSE NetMaas END) as NetMaas FROM @tbl T
boyle bir kodum var bunu mysql gore nasıl cevırebılırım
-
İşe öncelikle tbPersonel, tbCalisma ve tbAvans tablolarıyla birlikte Turkce_Kaldir'ı MySQL'de oluşturarak başlamalısın.
Ondan sonra bu tabloların ve fonksiyonun MySQL create script'i ile soruyu güncellersen iyi bir yanıt alırsın.
-
teşşkur ederım hocam
http://www.sqlines.com/online adresinden msqql kodlarımı mysql convert ettım
daha sonra gene calısmadı
DROP TEMPORARY TABLE IF EXISTS @tbl; CREATE TEMPORARY TABLE @tbl ( sPersonelID varchar(20), sAdiSoyadi varchar(20), sKimlikNo varchar(20), SaatUcret DOUBLE, Kesintiler DOUBLE, CalisilanGun DOUBLE, BrutMaas DOUBLE, NetMaas DOUBLE ) INSERT INTO @tbl SELECT sPersonelID, upper(dbo.Turkce_Kaldir(sAdiSoyadi)) as sAdiSoyadi,sKimlikNo,sSaatUcret,0,0,0,0 FROM tbPersonel where sdurum=1 UPDATE @tbl SET CalisilanGun = (SELECT sum(sCalismaSaat) FROM tbCalisma x WHERE t.sPersonelID = x.sPersonelID and MONTH(sCalismaTarih)=MONTH(convert([date], GETDATE(), 103)) and year(sCalismaTarih)=year(convert([date], NOW(), 103))) FROM @tbl t UPDATE @tbl SET Kesintiler = (SELECT sum(sAvansTutar) FROM tbAvans x WHERE t.sPersonelID = x.sPersonelID and MONTH(sAvansTarih)=MONTH(convert([date],GETDATE(), 103)) and year(sAvansTarih)=year(convert([date], NOW(), 103))) FROM @tbl t UPDATE @tbl t SET BrutMaas = CalisilanGun * SaatUcret UPDATE @tbl t SET NetMaas=BrutMaas-(CASE WHEN Kesintiler IS NULL THEN '0' ELSE Kesintiler END) SELECT sAdiSoyadi,sKimlikNo, (CASE WHEN Kesintiler IS NULL THEN '0' ELSE Kesintiler END) as Kesintiler, (CASE WHEN CalisilanGun IS NULL THEN '0' ELSE CalisilanGun END) as CalisilanGun, (CASE WHEN BrutMaas IS NULL THEN '0' ELSE BrutMaas END) as BrutMaas, (CASE WHEN NetMaas IS NULL THEN '0' ELSE NetMaas END) as NetMaas FROM @tbl T
bu kodların ıcındede msqql ait olan kodları duzenledıkten sonra çalıştı
(@ işareti GetDATE() ,birde sorgu sonlarına ; işareti koyunca çalıştı)
-
buda calışan hali
DROP TEMPORARY TABLE IF EXISTS tbl; CREATE TEMPORARY TABLE tbl ( sPersonelID varchar(255), sAdiSoyadi varchar(255), sKimlikNo varchar(255), SaatUcret float, Kesintiler float, CalisilanGun float, BrutMaas float, NetMaas float ); INSERT INTO tbl SELECT sPersonelID, sAdiSoyadi as sAdiSoyadi,sKimlikNo,sUcret,0,0,0,0 FROM tbPersonel where sdurum=1 and sFirma=1; UPDATE tbl t SET CalisilanGun = (SELECT sum(sCalismaSaat) FROM tbCalisma x WHERE t.sPersonelID = x.sPersonelID and MONTH(sTarih)=MONTH(NOW()) and YEAR(sTarih)=YEAR(NOW())) ; UPDATE tbl t SET Kesintiler = (SELECT sum(sAvansTutar) FROM tbAvans x WHERE t.sPersonelID = x.sPersonelID ); UPDATE tbl t SET BrutMaas = CalisilanGun * SaatUcret ; UPDATE tbl t SET NetMaas=BrutMaas-(CASE WHEN Kesintiler IS NULL THEN '0' ELSE Kesintiler END); SELECT sAdiSoyadi,sKimlikNo, (CASE WHEN Kesintiler IS NULL THEN '0' ELSE Kesintiler END) as Kesintiler, (CASE WHEN CalisilanGun IS NULL THEN '0' ELSE CalisilanGun END) as CalisilanGun, (CASE WHEN BrutMaas IS NULL THEN '0' ELSE BrutMaas END) as BrutMaas, (CASE WHEN NetMaas IS NULL THEN '0' ELSE NetMaas END) as NetMaas FROM tbl T
bu arada convert upper gıbı fonskyıonları kaldırdım
-
(
CASE
WHEN
Kesintiler
IS
NULL
THEN
'0'
ELSE
Kesintiler
END
)
as
Kesintiler
bu ve benzerleri yerine
ifnull(Kesintiler,0) as Kesintiler kullana bilirsin sanki
-
wert bunu yazdı
(
CASE
WHEN
Kesintiler
IS
NULL
THEN
'0'
ELSE
Kesintiler
END
)
as
Kesintiler
bu ve benzerleri yerine
ifnull(Kesintiler,0) as Kesintiler kullana bilirsin sanki
teşekkurler suan daha temız kod oldu
-
@lazz rica ederim ne demek, sen halletmişsin zaten her şeyi.
SQL Server'da da IfNull'a benzer IsNull ve MySQL'de de olan Coalesce'i kullanabilirsin bu arada, bunlar da daha okunaklı sorgu yazmanı sağlar, lazım olabilir ileride.
Coalesce'in IfNull ve IsNull'dan farkı 2'den fazla kabul etmesi. İlk NULL olmayan değeri döndürür.Senin örneğinde SQL Server'da
(CASE WHEN Kesintiler IS NULL THEN '0' ELSE Kesintiler END) as Kesintiler
yerine
Coalesce(Kesintiler, '0') As Kesintiler veya sadece 2 parametre olduğundan IsNull(Kesintiler, '0') As Kesintiler kullanılabilir kısacası. Kolay gelsin.
-
teşekkur ederım hocam
bir sorunum daha var
bu sorguyu php de nasıl alıcam
normalde sorguları fetch ile alıyordum fakat bu sorgudan null donuyor
bu sorgu fonksıyonum
function sorgu($diger="") { $sonuc = null; $this->baglantiAc(); $query = $this->db->query($diger)->fetch(); if ( $query ) $sonuc = $query; else $sonuc = null; $this->baglantiKapat(); return $sonuc; }
bu sorgu kodlarım
require_once("inc/veri.php"); $vt = new veri_islemleri (); $sorgu = $vt->sorgu("DROP TEMPORARY TABLE IF EXISTS tbl; CREATE TEMPORARY TABLE tbl ( sPersonelID varchar(255), sAdiSoyadi varchar(255), sKimlikNo varchar(255), SaatUcret float, Kesintiler float, CalisilanGun float, BrutMaas float, NetMaas float ); INSERT INTO tbl SELECT sPersonelID, sAdiSoyadi as sAdiSoyadi,sKimlikNo,sUcret,0,0,0,0 FROM tbPersonel where sdurum=1 and sFirma=1; UPDATE tbl t SET CalisilanGun = (SELECT sum(sCalismaSaat) FROM tbCalisma x WHERE t.sPersonelID = x.sPersonelID and MONTH(sTarih)=11 and YEAR(sTarih)=2018 ; UPDATE tbl t SET Kesintiler = (SELECT sum(sAvansTutar) FROM tbAvans x WHERE t.sPersonelID = x.sPersonelID ); UPDATE tbl t SET BrutMaas = CalisilanGun * SaatUcret ; UPDATE tbl t SET NetMaas=BrutMaas-(CASE WHEN Kesintiler IS NULL THEN '0' ELSE Kesintiler END); SELECT sAdiSoyadi,sKimlikNo, ifnull(Kesintiler,0) as Kesintiler, ifnull(CalisilanGun,0) as CalisilanGun, ifnull(BrutMaas,0) as BrutMaas, ifnull(NetMaas,0) as NetMaas FROM tbl T"); while ( $sorgu ) { $array[] = array( "sKimlikNo" => $sorgu[ "sKimlikNo" ], "sAdiSoyadi" => $sorgu[ "sAdiSoyadi" ], "Kesintiler" => number_format((float)$sorgu[ "Kesintiler" ] , 2, '.', ''). " TL", "BrutMaas" => number_format((float)$sorgu[ "BrutMaas" ] , 2, '.', ''). " TL", "CalisilanGun" => $sorgu[ "CalisilanGun" ] / 8, "NetMaas" => number_format((float)$sorgu[ "NetMaas" ] , 2, '.', ''). " TL" ); } print_r(json_encode($array));
-
PHP'den çok anlamadığım gibi bir de özel bir class var, onun da davranışını bilmiyorum. PDO falan olsa daha aşinayım.
Bence sen bunu yeni bir konu olarak PHP bölümünde aç.
-
pekı pdo kullanrak bunun cıktısını nasıl alırız anlatabılırmsın
-
<?php $host='host'; $dbname='database.adi'; $user='k.adi'; $pass='sifre'; $db=new PDO('mysql:host='.$host.';dbname='.$dbname,$user,$pass); // pdo class ı oluşturuyoruz $query=$db->query('show DATABASES'); // show databases kısmına sorgunu yapıştır dışarıdan parametre gelecekse prepare-bindparam-execute kullanmak gerekir güzenlik açısından $query=$query->fetchAll(); //buradan sonra dbden gelen data array şeklinde $query değişkenine aktardık ?>
yanlış hatırlamıyorsam
pdo da
$db->query('show DATABASES; show TABLES;');
gibi yapamıyordukmantıksız olduğunu biliyorum örneğe takılma
$db->query('show DATABASES;'); $db->query('show TABLES;');
şeklinde yapman lazım yani sorgunu parçalarına ayırman gerekecek
e yoghrumlamam buakadar