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 <[email protected]> > 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 <[email protected]> > >> öğ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 <[email protected]> >> >>> *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 <[email protected]> >>> >>>> 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 <[email protected]> >>>> >>>> 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 <[email protected]> >>>>> >>>>> 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 <[email protected]> >>>>>> >>>>>>> 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Ğ <[email protected]> >>>>>>> >>>>>>> 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 <[email protected]> >>>>>>>> >>>>>>>>> * TEKRARDIR >>>>>>>>> >>>>>>>>> http://spreadsheets.google.com/viewform?key=p2D-4c-fT0DKBPYbyIbZWIAörneğindeki >>>>>>>>> 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 >>>>>>>>> [email protected] >>>>>>>>> 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 >>>>>>>> [email protected] >>>>>>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Elvin Şiriyev >>>>>>> http://siriyev.net >>>>>>> >>>>>>> _______________________________________________ >>>>>>> Linux-programlama mailing list >>>>>>> [email protected] >>>>>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Nesimi ACARCA >>>>>> www.nesimia.com >>>>>> >>>>>> _______________________________________________ >>>>>> Linux-programlama mailing list >>>>>> [email protected] >>>>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Elvin Şiriyev >>>>> http://siriyev.net >>>>> >>>>> _______________________________________________ >>>>> Linux-programlama mailing list >>>>> [email protected] >>>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama >>>>> >>>>> >>>> >>>> >>>> -- >>>> Nesimi ACARCA >>>> www.nesimia.com >>>> >>>> _______________________________________________ >>>> Linux-programlama mailing list >>>> [email protected] >>>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama >>>> >>>> >>> >>> >>> -- >>> Elvin Şiriyev >>> http://siriyev.net >>> >>> _______________________________________________ >>> Linux-programlama mailing list >>> [email protected] >>> http://liste.linux.org.tr/mailman/listinfo/linux-programlama >>> >>> >> >> >> -- >> Nesimi ACARCA >> www.nesimia.com >> >> _______________________________________________ >> Linux-programlama mailing list >> [email protected] >> http://liste.linux.org.tr/mailman/listinfo/linux-programlama >> >> > > > -- > Elvin Şiriyev > http://siriyev.net > > _______________________________________________ > Linux-programlama mailing list > [email protected] > http://liste.linux.org.tr/mailman/listinfo/linux-programlama > > -- Nesimi ACARCA www.nesimia.com
_______________________________________________ Linux-programlama mailing list [email protected] http://liste.linux.org.tr/mailman/listinfo/linux-programlama
