[Linux-programlama] Re: Dinamik veri depolama ve okuma

---------

[Linux-programlama] Re: Dinamik veri depolama ve okuma

From: Elvin Şiriyev <elvin_at_siriyev.net>
Date: Fri, 20 Feb 2009 13:26:20 +0200
Message-ID: <ded068c00902200326w4e8706a8s12d1cb294f25a817@mail.gmail.com>

Özür dilerim, yanlışlık olmuş.
İlginiz için teşekkür ederim.

Onu ayırmaya çalışmakta maksadım ORDER BY, HAVING ve WHERE işlemleri içindi.
yine de teşekkürler.

2009/2/20 Nesimi ACARCA <nesimia.com_at_gmail.com>

>
> CSV Çıktı:
> "2009-02-19 14:37:15";"İsim:Elvin,Soyisim:Şiriyev"
> "2009-02-20 11:20:53";"İsim:Nesimi,Soyisim:Karadağ"
>
> aslında bu şekilde istediğiniz gibi olmuş ve dediğiniz gibi ayrı alanlarda
> olsa daha iyi olurdu. Her neyse onuda siz parçalayın.
>
> bu arada soyadım Karadağ değil ACARCA :)
>
> 2009/2/20 Elvin Şiriyev <elvin_at_siriyev.net>
>
>> Anıl hanım, dün vari tabanı yapısını oluşturdum. Yani ikinci sorum
>> sonradan gelişti.Tavsiyelerinizi inceledim.
>> Nesimi bey, hayır iki sonuç dönüyor.
>>
>> SQL dump:
>> CREATE TABLE IF NOT EXISTS `forms` (
>> `id` int(11) NOT NULL auto_increment,
>> `user_id` int(11) NOT NULL,
>> `name` varchar(250) collate utf8_turkish_ci NOT NULL,
>> `status` enum('normal') collate utf8_turkish_ci NOT NULL default
>> 'normal',
>> `time` timestamp NOT NULL default CURRENT_TIMESTAMP,
>> PRIMARY KEY (`id`)
>> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci
>> AUTO_INCREMENT=2 ;
>> INSERT INTO `forms` (`id`, `user_id`, `name`, `status`, `time`) VALUES
>> (1, 1, 'Yeni Form', 'normal', '2009-02-19 14:36:36');
>> CREATE TABLE IF NOT EXISTS `form_datas` (
>> `id` int(11) NOT NULL auto_increment,
>> `form_submit_id` int(11) NOT NULL,
>> `form_field_id` int(11) NOT NULL,
>> `value` tinytext collate utf8_turkish_ci NOT NULL,
>> PRIMARY KEY (`id`)
>> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci
>> AUTO_INCREMENT=5 ;
>> INSERT INTO `form_datas` (`id`, `form_submit_id`, `form_field_id`,
>> `value`) VALUES
>> (1, 1, 1, 'Elvin'),
>> (2, 1, 2, 'Şiriyev'),
>> (3, 2, 1, 'Nesimi'),
>> (4, 2, 2, 'Karadağ');
>> CREATE TABLE IF NOT EXISTS `form_fields` (
>> `id` int(11) NOT NULL auto_increment,
>> `form_id` int(11) NOT NULL,
>> `name` varchar(250) collate utf8_turkish_ci NOT NULL,
>> `options` varchar(250) collate utf8_turkish_ci NOT NULL,
>> PRIMARY KEY (`id`)
>> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci
>> AUTO_INCREMENT=3 ;
>> INSERT INTO `form_fields` (`id`, `form_id`, `name`, `options`) VALUES
>> (1, 1, 'İsim', ''),
>> (2, 1, 'Soyisim', '');
>> CREATE TABLE IF NOT EXISTS `form_submits` (
>> `id` int(11) NOT NULL auto_increment,
>> `form_id` int(11) NOT NULL,
>> `user_id` int(11) NOT NULL,
>> `time` timestamp NOT NULL default CURRENT_TIMESTAMP,
>> PRIMARY KEY (`id`)
>> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_turkish_ci
>> AUTO_INCREMENT=3 ;
>> INSERT INTO `form_submits` (`id`, `form_id`, `user_id`, `time`) VALUES
>> (1, 1, 1, '2009-02-19 14:37:15'),
>> (2, 1, 1, '2009-02-20 11:20:53');
>>
>> SORGU:
>> SELECT `fs`.`time` , @group := GROUP_CONCAT( DISTINCT CONCAT( `ff`.`name`
>> , ':', `fd`.`value` )
>> ORDER BY `ff`.`id` ASC
>> SEPARATOR ',' )
>> FROM `form_datas` AS `fd`
>> INNER JOIN `form_submits` AS `fs` ON ( `fs`.`id` = `fd`.`form_submit_id`
>> )
>> INNER JOIN `forms` AS `f` ON ( `f`.`id` = `fs`.`form_id` )
>> INNER JOIN `form_fields` AS `ff` ON ( `ff`.`id` = `fd`.`form_field_id` )
>> WHERE `f`.`id` =1
>> GROUP BY `fs`.`id`
>>
>> CSV Çıktı:
>> "2009-02-19 14:37:15";"İsim:Elvin,Soyisim:Şiriyev"
>> "2009-02-20 11:20:53";"İsim:Nesimi,Soyisim:Karadağ"
>>
>> Üzerinde uğraşmamın ve sizi meşkul etmemin sebebi @group'u bir şekilde
>> farklı alanlara bölmemiz gerektiğini düşündüğümdendir.
>>
>>
>>
>> 2009/2/20 Nesimi ACARCA <nesimia.com_at_gmail.com>
>>
>>> öğleden sonra görüşelim o zaman :)
>>>
>>> bu arada sizin sorgu tek satır döndermiyor mu?
>>> *Ad Soyad:deneme deneme,Cinsiyet:Erkek,Yaşınız:16-30,Kullandığınız
>>> Diller:php, diğerleriAd
>>> Soyad:nesimia,Cinsiyet:Erkek,Yaşınız:22-25,Kullandığınız Diller:java, php,
>>> diğerleri
>>>
>>> gibi
>>>
>>> *
>>>
>>>
>>> 2009/2/20 Elvin Şiriyev <elvin_at_siriyev.net>
>>>
>>>> *form_fields* tablomun bir de *options* alanı var. veri tiplerini orada
>>>> tutuyorum.
>>>>
>>>> vakitiniz azsa:
>>>> teşekkür ederim. sorunumu öyle yada böyle tavsiye ettiğiniz yöntemle
>>>> çözeceğim. saygılar sunarım.
>>>>
>>>> vaktiniz bolsa:
>>>> "sorguyu nasıl yaparız" ve "sorguyu nasıl yaparsınız" diye sordum bile.
>>>> çünki bunun çözümünde yeni birşeyler öğreneceğiz gibime geliyor.
>>>>
>>>>
>>>>
>>>>
>>>> 2009/2/20 Nesimi ACARCA <nesimia.com_at_gmail.com>
>>>>
>>>>> artık orası size kalmış tek tek mi yoksa join mi yaparsınız bilemem :)
>>>>> Ama bana, "sorguyu nasıl yaparız?" diye soruyorsanız yardım etmeeye
>>>>> çalıısıırm.
>>>>>
>>>>> Hatta alanlar tablosuna "veri tipi" alanı açarak, kullanıcının gireceği
>>>>> verilerin metin mi, sayı mı, tarih mi ...vb. şeklinde belirtebilirsiniz.
>>>>>
>>>>> 2009/2/20 Elvin Şiriyev <elvin_at_siriyev.net>
>>>>>
>>>>> Evet. EAV mantığı bu nesimi bey. şimdi de bunun sorgusunda takıldım.
>>>>>>
>>>>>> tek sorguyla (ve mümkünse tek SELECT ile (JOIN olabilir :P ) ) bunu
>>>>>>
>>>>>> ____________________________________________________
>>>>>> *Ad Soyad | Cinsiyet | Yaşınız | Kullandığınız Diller
>>>>>>
>>>>>> -------------------------------------------------------------------------------------------
>>>>>> *deneneme deneme | Erkek | 16-30 | php, diğerleri
>>>>>> nesimia | Erkek | 22-25 | java, php, diğerleri
>>>>>>
>>>>>> -------------------------------------------------------------------------------------------
>>>>>>
>>>>>> şekline sokmak için nasıl bir sorgu kullanabilirim.
>>>>>>
>>>>>> *Geldiğim Nokta:*
>>>>>> Sorgu:
>>>>>> *SELECT `fs`.`time` , @group:= GROUP_CONCAT(DISTINCT CONCAT(
>>>>>> `ff`.`name` , ':', `fd`.`value`)
>>>>>> ORDER BY `ff`.`id` ASC
>>>>>> SEPARATOR ',')
>>>>>> FROM `form_datas` AS `fd`
>>>>>> INNER JOIN `form_submits` AS `fs` ON ( `fs`.`id` =
>>>>>> `fd`.`form_submit_id` )
>>>>>> INNER JOIN `forms` AS `f` ON ( `f`.`id` = `fs`.`form_id` )
>>>>>> INNER JOIN `form_fields` AS `ff` ON ( `ff`.`id` = `fd`.`form_field_id`
>>>>>> )
>>>>>> WHERE `f`.`id` =1
>>>>>> GROUP BY `fs`.`id`*
>>>>>> Sonuç:
>>>>>> *Ad Soyad:deneme deneme,Cinsiyet:Erkek,Yaşınız:16-30,Kullandığınız
>>>>>> Diller:php, diğerleri
>>>>>> Ad Soyad:nesimia,Cinsiyet:Erkek,Yaşınız:22-25,Kullandığınız
>>>>>> Diller:java, php, diğerleri*
>>>>>>
>>>>>> NOT: benim tablo yapında fazladan bir form_submits(form_submit_id)
>>>>>> var. bu da bir formdan ve farklı kişilerden gelen verileri ayırt edebilmek
>>>>>> için. Kafaları karıştırmasın.
>>>>>>
>>>>>>
>>>>>> Saygılar.
>>>>>>
>>>>>>
>>>>>> 2009/2/20 Nesimi ACARCA <nesimia.com_at_gmail.com>
>>>>>>
>>>>>> formalar
>>>>>>> *id | isim | aciklama*
>>>>>>> 1 | Yazılım Dili Anketi |
>>>>>>>
>>>>>>> alanlar
>>>>>>> *id | fid | isim |veritipi | aciklama*
>>>>>>> 1 | 1 | Ad Soyad | Metin |
>>>>>>> 2 | 1 | Cinsiyet | Metin |
>>>>>>> 3 | 1 | Yaşınız | Metin |
>>>>>>> 4 | 1 | Kullandığınız Diller | Metin |
>>>>>>>
>>>>>>> veriler (satırlar)
>>>>>>> *id | aid | deger*
>>>>>>> 1 | 1 | deneme deneme
>>>>>>> 2 | 2 | Erkek
>>>>>>> 3 | 3 | 16-30
>>>>>>> 4 | 4 | php, diğerleri
>>>>>>> 5 | 1 | nesimia
>>>>>>> 6 | 2 | Erkek
>>>>>>> 7 | 3 | 22-25
>>>>>>> 8 | 4 | java, php, diğerleri
>>>>>>>
>>>>>>> fid = form id
>>>>>>> aid = alan id
>>>>>>>
>>>>>>> Her form için form tablosunda bir kayıt açarsınız. Açılan formaların
>>>>>>> alanları içinde alanlar tablosunu, bu alanlara veri girmek içinde veriler
>>>>>>> tablosunu kullanabilirsiniz.
>>>>>>>
>>>>>>> Mesela, verileri okumak için.
>>>>>>> 1-Form tablosundan formun adını ve id nosunu al
>>>>>>> 2-fid ye göre veri girilecek sütunu olusturup, bu sütuna girilecek
>>>>>>> verileri "veriler" tablosunda alıp yukarıdan aşağı ya doğru gir.
>>>>>>> 3-alanlar tablosunda ki veriler bitene kadar 2. adımdan devam et.
>>>>>>>
>>>>>>> (2. ve 3. adımlarda iç içe döngü olduğunu unutma)
>>>>>>>
>>>>>>> şuan aklıma gelen böyle bisi, umarım yanlış anlamamışımdır. :)
>>>>>>>
>>>>>>>
>>>>>>> 2009/2/19 Elvin Şiriyev <elvin_at_siriyev.net>
>>>>>>>
>>>>>>>> Anıl hanım, MySQL ve PHP kullandığım için sanırım django işimi
>>>>>>>> göremeyecek.
>>>>>>>> araştırmalarımda "EAV model" denilen bir veri tabanı modeline
>>>>>>>> rasladım. aslında kullandığımız birşey, her form için bir tablo
>>>>>>>> oluşturmaktan daha mantıklı geliyor. Ama yavaş olacağını düşünüyorum. başka
>>>>>>>> bir olanak da veritabanına serialize ederek kaydetmek, bu zaman da sıralama
>>>>>>>> vs işlemleri mümkün olmayacak veya performans sıkıntısına neden olacak.
>>>>>>>>
>>>>>>>> Karar veremedim.
>>>>>>>>
>>>>>>>> İlginiz için teşşekkürler.
>>>>>>>>
>>>>>>>> 2009/2/19 ANIL KARADAĞ <anil.karadag_at_gmail.com>
>>>>>>>>
>>>>>>>> Django'yu biliyor musunuz bilmiyorum ancak son 2 aydır bu güzel
>>>>>>>>> framework ile ugrasiyorum. Bu framework kendine özel bir model api ve
>>>>>>>>> database api içermektedir.
>>>>>>>>>
>>>>>>>>> Django'da veri tabanında yer alan bir tablo model api kurallarına
>>>>>>>>> uygun bir sekilde hazırlanan bir class a eşittir.
>>>>>>>>>
>>>>>>>>> Ornek
>>>>>>>>>
>>>>>>>>> Class student(models.Model):
>>>>>>>>> first_name= models.CharField(max_lenght=20, null=True)
>>>>>>>>> last_name= models.CharField(max_lenght=30, null=True)
>>>>>>>>> note= models.DecimalField(max_digits=5, places=2, default=0)
>>>>>>>>>
>>>>>>>>> kod blugunun sql carsiligi:
>>>>>>>>>
>>>>>>>>> create table student (first_name varchar(20) default null,
>>>>>>>>> last_name varchar(30) default null, note decimal(5,2) default 0,) dir ve
>>>>>>>>> buna ek olarak otomatik artan bir id kolonu.
>>>>>>>>>
>>>>>>>>> Sende formundaki degerlere gore tablosunu bu sekilde uretebilirsin.
>>>>>>>>>
>>>>>>>>> http://www.djangoproject.com/
>>>>>>>>>
>>>>>>>>> http://docs.djangoproject.com/en/dev/ref/models/instances/?from=olddocs
>>>>>>>>>
>>>>>>>>> 2009/2/19 Elvin Şiriyev <elvin_at_siriyev.net>
>>>>>>>>>
>>>>>>>>>> * TEKRARDIR
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> http://spreadsheets.google.com/viewform?key=p2D-4c-fT0DKBPYbyIbZWIA%c3%b6rne%c4%9findeki gibi dinamik olarak oluşturulan formdan gelen verileri
>>>>>>>>>> http://spreadsheets.google.com/ccc?key=p2D-4c-fT0DKBPYbyIbZWIA
>>>>>>>>>> daki gibi sundabilmek için nasıl bir veritabanı yapısı oluşturmalıyım?
>>>>>>>>>>
>>>>>>>>>> Tavsiyelerinizi bekliyorum.
>>>>>>>>>>
>>>>>>>>>> Teşekkürler ...
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Elvin Şiriyev
>>>>>>>>>> http://siriyev.net
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Linux-programlama mailing list
>>>>>>>>>> Linux-programlama_at_liste.linux.org.tr
>>>>>>>>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Anıl KARADAĞ
>>>>>>>>> Cihan Bilişim A.Ş. - Yazılım Geliştirme Uzmanı
>>>>>>>>> GYTE- Bilgisayar Müh. Yüksek Lisans öğrencisi
>>>>>>>>> http://anilkaradag.info/blog
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Linux-programlama mailing list
>>>>>>>>> Linux-programlama_at_liste.linux.org.tr
>>>>>>>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Elvin Şiriyev
>>>>>>>> http://siriyev.net
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Linux-programlama mailing list
>>>>>>>> Linux-programlama_at_liste.linux.org.tr
>>>>>>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Nesimi ACARCA
>>>>>>> www.nesimia.com
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Linux-programlama mailing list
>>>>>>> Linux-programlama_at_liste.linux.org.tr
>>>>>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Elvin Şiriyev
>>>>>> http://siriyev.net
>>>>>>
>>>>>> _______________________________________________
>>>>>> Linux-programlama mailing list
>>>>>> Linux-programlama_at_liste.linux.org.tr
>>>>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Nesimi ACARCA
>>>>> www.nesimia.com
>>>>>
>>>>> _______________________________________________
>>>>> Linux-programlama mailing list
>>>>> Linux-programlama_at_liste.linux.org.tr
>>>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Elvin Şiriyev
>>>> http://siriyev.net
>>>>
>>>> _______________________________________________
>>>> Linux-programlama mailing list
>>>> Linux-programlama_at_liste.linux.org.tr
>>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>>>
>>>>
>>>
>>>
>>> --
>>> Nesimi ACARCA
>>> www.nesimia.com
>>>
>>> _______________________________________________
>>> Linux-programlama mailing list
>>> Linux-programlama_at_liste.linux.org.tr
>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>>
>>>
>>
>>
>> --
>> Elvin Şiriyev
>> http://siriyev.net
>>
>> _______________________________________________
>> Linux-programlama mailing list
>> Linux-programlama_at_liste.linux.org.tr
>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>>
>>
>
>
> --
> Nesimi ACARCA
> www.nesimia.com
>
> _______________________________________________
> Linux-programlama mailing list
> Linux-programlama_at_liste.linux.org.tr
> http://liste.linux.org.tr/mailman/listinfo/linux-programlama
>
>

-- 
Elvin Şiriyev
http://siriyev.net

_______________________________________________
Linux-programlama mailing list
Linux-programlama_at_liste.linux.org.tr
http://liste.linux.org.tr/mailman/listinfo/linux-programlama
Received on Fri 20 Feb 2009 - 12:14:44 EET

---------

Bu arsiv hypermail 2.2.0 tarafindan uretilmistir.