"Enter"a basıp içeriğe geçin

Kategori: mySQL

Sabahın köründe (06.00) MySQL istemcisi TablePlus için %50 indirim kodunu nasıl aldığımın hikayesi

MySQL’in 8.x sürümünden midir bilmiyorum, yıllardır kullandığım ücretsiz SequelPro bu sürümdeki sunuculara bağlanabiliyor ama herhangi bir db gösteremiyordu. Kendi lokalimde de aynı şey olunca ancak sürüm mevzusu kafama dank etti. Bu sorun ilk ortaya çıktığında kurduğum bir kaç alternatif MySQL istemcisi arasından TablePlus‘ı kullanmaya başlamıştım. Ücretsiz sürümünde sadece iki sekme açabiliyor olmak giderek problem oluyordu. Onun dışında yetenekleri gayet iyi görünüyordu. Ayrıca internette yaptığım küçük bir araştırmada da hakkında iyi sözler vardı. Rakipleri genelde yıllık olarak ve daha yüksek rakamlar istiyorlardı. TablePlus ise tek seferlik 59 $ fiyat biçiyordu. Ayrıca öğrenciler için %50 indirim vardı. Merak edenler için hemen söyleyeyim.…

MySQL için strip_tags() fonksiyonu

PHP’de kullandığımız strip_tags() fonksiyonu parametre olarak aldığı metindeki tüm HTML taglarını ortadan kaldırıp sadece metin bilgisinin kalmasını sağlıyordu. Bu fonksiyona MySQL’de de ihtiyaç duyduğunuz oldu mu? Benim oldu. Buyrun burdan yakın efendim:  delimiter ;; CREATE  FUNCTION strip_tags2(str text) RETURNS text CHARSET utf8 BEGIN     DECLARE start, end INT DEFAULT 1;     LOOP         SET start = LOCATE(“”, str, start);         IF (!end) THEN SET end = start; END IF;         SET str = INSERT(str, start, end – start + 1, “”);     END LOOP; END  ;; delimiter ;

Mysql’de diziye göre sıralamak

SQL sorgularında “where  siparis_id in (2,10,1,3)” gibi yapılar pek tasvip edilmese de, zorunlu kaldığınız durumlar olabilir. Eğer nihayi çıktınızı da bu sırada görmek istiyorsanız sorgunun en sonuna order by FIND_IN_SET(siparis_id, ‘2,10,1,3’) yazmanız yeterli.

MySQL’de bozuk view’ların detayını görmek

MySQL view’ları siz view’i oluşturduğunuz tabloda yapısal değişiklikler yaptığınızda bozulurlar. Kullandığınız veritabanı istemcisine bağlı olarak MySQL’deki bozuk viewlarınızı oluşturan sorguyu göremeyebilirsiniz. PhpMyAdmin gösterir mesela. Göremediğiniz view’ın içeriğini not almamışsanız düzeltmek için epey terlemeniz gerekir. Eğer istemciniz bozuk view’ları göstermiyorsa şu query’i kullanarak view detayını bozuk da olsa alabilirsiniz. select view_definition from information_schema.views where table_name = “buraya_view_adi_gelecek”;

Group Concat!

İyi kötü 11 yıldır PHP-MySQL-PostgreSQL ile uğraşıyorum. Binlerce kez tablo şeklinde listeler hazırlamışımdır; sipariş listesi, müşteri listesi gibi. Genel olarak benzese de aslında sipariş listesi ile müşteri listesi ayrı yapıdadır. Müşteri listesi tek tablodan ibaret olabilir. Müşterinin adı, soyadı, adresi, telefonu vs. Bunları alt alta listelemekte hiçbir beis yok. Ama sipariş listesi öyle değildir. Siparişin genel bilgilerinin (sipariş tarihi, siparişi veren müşterinin id’si, siparişin durumu vs) yanısıra bir de o siparişte geçen ürünlerin id, adet ve belki o anki satış fiyatlarının tutulduğu ayrı bir tablo vardır. İç içe query’ler olmasın, kullanıcının da kafası karışmasın diye  sipariş listesini oluştururken sadece sipariş…

MySQL: Insert, ignore, dublicate

MySQL ile tanışalı 10 seneyi geçti; şu hayat kurtaran “ignore” ifadesine bir kere bile denk gelmedim. Bu gece mühim bir işlemi PHP’ye bırakmaksızın sadece veritabanı üzerinden halledeyim diye uğraşırken -kabaca ifadeyle belli bir kriterdeki verileri bir tablodan başka bir tabloya arşivliyordum- hedef tablodaki unique indexler yüzünden canım sorgum “duplicate error” alıyor ve canımı sıkıyordu. Geçen hafta daha da büyük bir datayı işlerken bu tip bir sorun çıktığında işlemi tek bir query ile yapmak yerine aynı vazifeyi görecek update yada insert satırlarınının sql ifadelerini bir txt dosyaya yazıyor ve MySQL client’i üzerinden biner ikişer çalıştırıyordum. Query’ler satır satır olduğundan dublicate hatası…

Mysql için count_str() “kelimedeki karakterin adedi” fonksiyonu

Bir önceki yazıda MySQL için split_str() fonksiyonunu oluşturmuştuk. Kelimeleri verdiğimiz karaktere göre bölüyordu. Amacımız; ad ve soyad değerleri tek bir sütunda isim olarak verildiğinde bu isim bilgisinden ad ve soyadı ayrıştırabilmek idi. split_str() fonksiyonu datayı istediğimiz karaktere göre (örneğin boşluk karakteri) bölebiliyor ve ortaya çıkan gruplardan hangisini görmek istiyorsak onu almamızı sağlıyor. Ama problemimiz için bu yeterli değil. Çünkü isimler her zaman “Fehim Tabak” gibi bir ad ve bir soyaddan oluşmuyor. İki ad ve bir soyad, hatta kulakları çınlasın sevgili arkadaşım “Yusuf Ziya Bektaş Köseoğlu” gibi üç ad ve bir soyad da olabiliyor. Böyle bir bilgiden soyadı ve adı ayrıştırabilmek için “en son kelime soyaddır” ve “en son kelime hariç diğerleri addır” diyebilmek gerek. Aşağıda yazacağımız count_str() fonksiyonu işte bu noktada devreye giriyor.

CREATE FUNCTION COUNT_STR(
x VARCHAR(255),
delim VARCHAR(12)
)
RETURNS INT
RETURN LENGTH(x)-LENGTH(REPLACE(x,delim,”));

Bu fonksiyon parametre olarak verdiğimiz karakterin yine parametre olarak verdiğimiz kelimenin içerisinde kaç kere geçtiğini döndürüyor. Boşluk ‘ ‘ karakteri ilgili alanda kaç kere var diye kullanırsak ‘Fehim Tabak’ için 1, ‘Yusuf Ziya Bektaş Köseoğlu’ için 3 döndürür. Bu sayının bir fazlası bize o alanda kaç kelimelik bir bilgi olduğunu yani ismin kaç kelimeden oluştuğunu döndürür.

MySQL için split fonksiyonu

Excel’den aldığım bir veriyi hazırladığım bir tabloya aktarmam gerekiyordu. Tablomda ad ve soyad sütunları ayrı ayrı olacak şekilde tasarlanmıştı ama aktarmak istediğim Excel dosyasında isim olarak tek sütun vardı. İlk iş olarak Excel dosyasını phpmyadmin yardımıyla komple bir tablo olarak veritabanına yükledim. Aktarma için kaynak tablodan select yapıp hedef tabloya insert uygulayacaktım ama bu ad, soyad sütunlarının ayrı ayrı olması işi biraz bozdu. Kaynak tablodan select yaparken isim sütunundaki veriyi kelimeler arasındaki boşluklardan yakalayıp ad ve soyadını soyadını ordan ayrı ayrı yakalamak icab ediyordu. PHP’de bu tarz bir parçalama işlemini explode() fonksiyonu ile yapmaya alışmış biri olarak keşke MySQL’de de…

Hayat kurtaran sql: mysql replace();

Hostinginden ve  teknik desteğinden sorumlu olduğunuz bir blog var. Müşterinizi kırmamak için makul isteklerine “peki” demeniz gerekiyor. Müşteri “siteyi sizin sunucunuza taşıdık, gayet güzel ama bazı dosyalar koymuştum, onlara tıklayınca indirme penceresi açılmıyor. Neden?” diye soruyor. Web sitesi üzerinden kırık linki denediğimde sorun hemen kendini gösteriyor. Link eski sunucunun “ip adresini” gösterecek sekilde verilmiş. Yeni sunucudaki ip adresi tutmadığı için linkler çalışmıyor. Yoksa dosyalar sağlam ve yerli yerinde. En basitinden bir php script yazar, iki sql ile sorunu çözerim diye düşündüm: İlk sql bu ip’nin geçtiği satırları çekecek, while içerisinde str_replace ile link düzeltilecek ve ikinci bir sql ile aynı…

MacPorts ile MySQL kurulumu

Bir önceki yazımızda MacPorts kullanarak MySQL ve PostgreSQL destekli bir Apache2-PHP5 kurulumu gerçekleştirmiştik. Bu yazımızda ise MacPorts ile MySQL kurulumunu öğreneceğiz. Öğreneceğiz diyorum çünkü ben de bu işlemleri henüz yeni kurduğum macos üzerinde ilk defa yapıyorum. Hazır yapmışken bir yere kaydedeyim de ileride tekrar nasıl yaptığımı hatırlamak kolay olsun istedim. BT Hayat’a da yeni bir yazı çıkmış oldu böylece..

MacPorts ile MySQL’i kurmak zaten iki satırlık bir iş:

#sudo port install mysql5
#sudo port install mysql5-server

MySQL’in başlangıc veritabanlarını oluşturalım:

# sudo /opt/local/lib/mysql5/bin/mysql_install_db –user=mysql