bildirgec.org

sql hakkında tüm yazılar

Ajax İle E-Posta Listesi Yapımı

admin | 28 July 2009 11:02

Sitenizde bir köşeye mail adresinizi giriniz bölümü koyarak, takipçilerine yeni yaptığınız yenilikleri duyurmak istiyorsunuz. Bunun için AJAX ‘lı şık birşey güzel olur değil mi? Hem bu sayede sayfanız yenilenmemiş olur. Hemen çalışmamıza başlıyorum. AJAX gönderme işini JQuery kütüphanesini kullanarak yapacağım. İlk başta mail ekleme formunu hazırlıyoruz…

Adım adım açıklıyorum. İlk başta AJAX ile gönderildiğinde değişmesi için “epostalistediv” id li bir div oluşturuyoruz. 

1
2
<div id="epostalistediv">
</div>

SQLite Sunucusuz veritabanı uygulaması

mglass | 24 July 2009 18:22

SQLite
SQLite

Sunucu olmadan çalışan hafif, kullanıcıdan hiçbir ayarlama yapma gereksiniminde bulunmayan, hızlı tek bir dosyadan oluşan SQL komutlarını kullanarak veri alış-verişi yapan gömülü bir veritabanıdır. uygulamalar ile SQLite kullanmak için tek bir dosya ile basit bir kitaplık yeterli. SQLite hiçbir şekilde Sunucu kurulumu gerektirmez ve sunucuya bağlı değildir. detaylı bilgi ve SQLite’ı indirmek için buraya bakabilirsiniz.

SQLite
SQLite

SQLite kitaplığı 500kb’dan daha az yer kaplar. Tek bir dosyayı veritabanı olarak kullanması ve sunucu istemci mantığıyla çalışmaması nedeniyle pek çok avantajı var. birçok platform üzerinde çalışabilir bunlar: Linux, windows, Mac OS Xvb…

Windowssürümünü burdan indirebilirsiniz. ayrıca SQLite’ın açık kaynak kodlarının tamamını da buradan indirip inceleyebilirsiniz.
SQLite C programlama dili kullanılarak geliştirilmiştir… orjinal kaynak için bakınız pdf

Sonsuz kategori sistemi

admin | 11 July 2009 17:30

Ben bu sistemi ağaç mantığı ile açıklamak istiyorum bundan 3 sene önce araştırmadan keşfettiğim daha sonra bazı makalelerde karşılaştığım bir yapıdan bahsedeceğim. Bu örnek biraz basit olabilir ama geliştirmek sizin zihinsel gücünüze kalmıştır.

Genelde eticaret sitelerinde kategori ağacının kaç dal olacağı bilinmez bazen 2 dal bazen 5 dal bunu bilemeyiz. Ağaç sistemi ile bu işi çözmek kolay benim DNA adı verdiğim bu sistem kategorileri tek bir tabloda toplayarak belirli bir alanda kategorinin atası dediğim ilk kategorinin ID numarasından başlayarak bir üst ve kendi ID si olmak üzere bir DNA zinciri oluşturuyorum ne diyor bu diyebilirsiniz 🙂 Şimdi konuyu biraz açacağım ve daha iyi anlayacağınızı umuyorum.

Sql ile tarih’e eşit kayıtları getirme.

kuen | 10 April 2009 11:17

SQL Server’da tarih alanları için kullanılan Veri Tipler le ilgili küçük bir örnek yapalım. Veri tipimiz SmallDatetime olsun.

SmallDateTime
‘01.06.2007 00:00:00’
‘YYYY-MM-DD hh:mm:ss’

Şeklinde kayıt tutar.

Bugünün kayıtlarını getirmek istiyoruz yada belirlediğimiz bir tarihteki kayıtları getirmek istiyoruz. Bu gibi durumlarda şöyle yapılabilirdi.

1
select * from tablo_adi where tarih_alani = getdate()

MsSQL de PK_Constraint halinde Insert’e devam etmek

meliheran | 05 April 2009 18:14

A tablomuzda ISIM diye bir kolonumuz var ve biz bir kaynaktan bir çok ismi bu tabloya ekleyeceğiz. İşlemi başlattık ve PK_Constraint hatası aldık işlem ROLLBACK edilip insert iptal edilir! İlk aklımıza gelen çözüm ise ..where not exists(.. şeklinde bir kod ile satır ekleyeceğimiz tabloda eklenecek olanın kontrolünü yapıp eğer yok ise satırı ekletmektir.Ancak bu milyona yakın kayıtlarda çok düşük bir performans sergiler.

Çözüm;Milyonlarca kayıdımı A tablosuna ekle ancak aynı isimlerin olması halinde hatayı gözardı et ve o ismi atla diğerine geç.

İşte bunu yapabilmek için PK olan kolonun IGNORE_DUP_KEY özelliğini ONhaline getirmektir.Normal şartlarda PK olan bir alanın bu özelliğini değiştiremeyiz. Oyüzden ilgili PK alanı için bir dizi değişiklik yapacağız.

  • ISIM alanının PK sını kaldırmalıyız. (Remove Primary Key),
  • PK’i kaldırmamızla Uniqued haldeki Clustered Indexde kalkmış olur.
  • Yani şuan bir insert işlemi yaparsak kayıtları çiftlemiş oluruz üstelik indeximizide kaybettik. Bunu düzeltmek ve kayıt kirliliğine izin vermemek , unique/tekilliği korumak için Index menüsünden ilgili tablonun alanı için (örneğin ISIM alanına) Uniqued , Clustered index ekliyoruz.

    Böylece sonuç olarak ilk halde PK olan bir alan ikinci durumda PK değildir ama halen unique/tekil kayıt saklar (hatta halen tekil olmayan bir kayıt işleminde hata verir) ve ilk durumdaki gibi clustered indexe sahipdir.
    İşte ancak bu durumda ISIM alanının IGNORE_DUP_KEY özelliğini ON olarak değiştirebiliriz. Yani kayıt çiftlemesindeki Error mesajını gözardı et demiş olucaz.

    Bunu yapmak içinde QUERY ekranında,

    1
    2
    3
    4
    5
    6
    7
    8
    ALTER INDEX IndexIsmi ON
    dbo.TabloIsmi
    REBUILD WITH(IGNORE_DUP_KEY = ON )
    --Default da OFF dur ve buda PK_Constraint hatası verip
    --Insert işlemini Rollback yapmasına neden olur
    --veya rebuild yerine
    SET (IGNORE_DUP_KEY = ON ) ;

    çalıştırırız.Artık bundan sonra yapacağınız insert işlemlerinde tabloda aynı kayıt varsa PK_Constraint hatası yüzünden işlem sonlandırılıp tüm insert rollback edilmez , ilgili satır atlanır ve kayıt işlemine devam edilir.

Random (rastgele) Array dan Getir Fonksiyonu

badursun | 24 March 2009 16:05

Fonksiyon kütüphanesi oluşturmaya devam ediyoruz ve Veritabanından random yani rastgele veri alırken neler kullanabileceğimize göz gezdiriyoruz..

Bu konuda

  • Array ile random veri seçmeyi
  • Access veritabanı ile random veri almayı
  • SQL veritabanı ile random veri almayı
    öğrenebilirsiniz.

Diyelim ki elimizde bir dizi değişkenimiz var, bunlardan random yani rastgele olarak bir tane seçip kullanmak istiyoruz. Bu durumda defalarca işlem tekrarlatmaya gerek yok. Yine fonksiyon kütüphanemizin içine ekleyeceğimiz ufak bir kod kümesi ile istediğimiz alanda değişkenlerimiz vasıtasıyla array üzerinden bir değişken seçebiliriz.

Asp ile SQLden output alma ve Command kullanımı …

admin | 18 March 2009 12:35

Henüz SP ( stored procedure ) ile yeni ilgililer yada orta düzey projeler için kullanan birçok kişinin zaman içerisinde sıkıntı çektiği yada çektiğini düşündüğüm birşeydir output okuma. Toplam kayit dönüşlerinde yada insert sonrası bilgi dönüşlerinde update sonrasi bilgi dönüşlerinde ve daha birçok noktada, çoğu kez kullanılması icab eden fakat SP ile yeni ilgilenenlerin kafasini karıştıran bir durumdur SP output …

Öncelikle kullanacağımız SP ‘nin kodlarını paylaşarak başlamak isterim …

SP ( Stored Procedure ) kodları :

1
2
3
4
5
6
7
8
9
CREATE PROCEDURE SP_OUTPUT_SAMPLE
@GET_ID int,
@OUT_TP int = Null OUTPUT,
@OUT_TX int = Null OUTPUT
AS
BEGIN
SELECT @OUT_TP = Count(REG_ID) FROM MESSAGES WHERE USER_ID = @GET_ID
SELECT @OUT_TX = Count(REG_ID) FROM INVITES WHERE USER_ID = @GET_ID
END

SQL de yüksek performans ile …

admin | 16 March 2009 15:24

Denemeler sonucu elde ettiğim ve kullanımı da oldukça kolay olan bir stored procedure stored procedure. Öncelikle belirtmek isterim ki MsSQL platformuna ait bu stored procedure veri sayfalamanızda, veri listelemenizde, son kayıtları getirmenizde kullanabileceğiniz bir sp olup performans seviyesi sizin de denemeleriniz sonunda görebileceğiniz gibi oldukça yüksektir.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
CREATE PROCEDURE SP_RESULT
(
@Tables varchar(1000),
@PK varchar(100),
@Sort varchar(200) = NULL,
@PageNumber int = 1,
@PageSize int = 10,
@Fields varchar(1000) = '*',
@Filter varchar(1000) = NULL,
@Group varchar(1000) = NULL)
AS
IF @Sort IS NULL OR @Sort = ''
SET @Sort = @PK
DECLARE @SortTable varchar(100)
DECLARE @SortName varchar(100)
DECLARE @strSortColumn varchar(200)
DECLARE @operator char(2)
DECLARE @type varchar(100)
DECLARE @prec int
IF CHARINDEX('DESC',@Sort)>0
BEGIN
SET @strSortColumn = REPLACE(@Sort, 'DESC', '')
SET @operator = '<='
END
ELSE
BEGIN
IF CHARINDEX('ASC', @Sort) = 0
SET @strSortColumn = REPLACE(@Sort, 'ASC', '')
SET @operator = '>='
END
IF CHARINDEX('.', @strSortColumn) > 0
BEGIN
SET @SortTable = SUBSTRING(@strSortColumn, 0, CHARINDEX('.',@strSortColumn))
SET @SortName = SUBSTRING(@strSortColumn, CHARINDEX('.',@strSortColumn) + 1, LEN(@strSortColumn))
END
ELSE
BEGIN
SET @SortTable = @Tables
SET @SortName = @strSortColumn
END
SELECT @type=t.name, @prec=c.prec
FROM sysobjects o
JOIN syscolumns c on o.id=c.id
JOIN systypes t on c.xusertype=t.xusertype
WHERE o.name = @SortTable AND c.name = @SortName
IF CHARINDEX('char', @type) > 0
SET @type = @type + '(' + CAST(@prec AS varchar) + ')'
DECLARE @strPageSize varchar(50)
DECLARE @strStartRow varchar(50)
DECLARE @strFilter varchar(1000)
DECLARE @strSimpleFilter varchar(1000)
DECLARE @strGroup varchar(1000)
IF @PageNumber < 1
SET @PageNumber = 1
SET @strPageSize = CAST(@PageSize AS varchar(50))
SET @strStartRow = CAST(((@PageNumber - 1)*@PageSize + 1) AS varchar(50))
IF @Filter IS NOT NULL AND @Filter != ''
BEGIN
SET @strFilter = ' WHERE ' + @Filter + ' '
SET @strSimpleFilter = ' AND ' + @Filter + ' '
END
ELSE
BEGIN
SET @strSimpleFilter = ''
SET @strFilter = ''
END
IF @Group IS NOT NULL AND @Group != ''
SET @strGroup = ' GROUP BY ' + @Group + ' '
ELSE
SET @strGroup = ''
EXEC(
'
DECLARE @SortColumn ' + @type + '
SET ROWCOUNT ' + @strStartRow + '
SELECT @SortColumn=' + @strSortColumn + ' FROM ' + @Tables + @strFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + '
SET ROWCOUNT ' + @strPageSize + '
SELECT ' + @Fields + ' FROM ' + @Tables + ' WHERE ' + @strSortColumn + @operator + ' @SortColumn ' + @strSimpleFilter + ' ' + @strGroup + ' ORDER BY ' + @Sort + '
'
)

SQL Case kullanımı (ASP)

admin | 16 March 2009 13:24

Birçoğumuz oluşturduğumuz veritabanı içeriklerini farkında olmadan yanlış hazırlayıp performansımızı düşürsekde birçoğumuzda kod yazarken aynı hatayı yapmaktayız. Mesela bir profil sayfasını görüntülerken kimi cinsiyet için nvarchar data tipini kullanırken kimi ise bit data tipini kullanır. Bit ( Evet / Hayir yada True / False ) kullandığımız veritabanına göre sorgusu değişse de biz kod yazarken ki sıkıntısıyı ele alacağız. Profil sayfasını görüntülerken if sorgusu içine alır eğer şöyle ise böyle yaz böyle ise böyle yaz deriz. Fakat kullandığımız platform ( ASP ‘yi ele aliyorum. ) SQL kadar hızlı ve performanslı çalışmamaktadir. Eğer işi SQL’e yaptırırsak performansı arttırmış olacağız. Şöyle ki ;