PDA

Orijinalini görmek için tıklayınız : Mysql veritabanı yapısı sorunu.. Veritabanı uzmanları yardımcı olabilir mi ?


codeksper
20-07-2017, 23:56:49
Konu biraz uzun oldu ama derdimi anlatabilmek adına sanırım gerekliydi. Üstadlar üşenmez de okur ve bi yol gösterirlerse çok çok sevinirim.

product
product_id | name | xxx | xxx | xxx

category
category_id | data_type | title | parent | parents | xxx | xxx | xxx

product_extend_cat
product_extend_cat_id | product_id | cat_id

product_stock
product_stock_id | product_id | size_wrap_id | size_value_id | stock

An itibarı ile yukardaki gibi 4 tablomuz var.

category tablosunda kategoriler,renk seçenekleri,bedenler/numaralar,özellik listeleri,ve özellik listelerindeki değerler olmak üzere 6 tür veri tutuluyor.

Verinin ne olduğu data_type sütununa yazılıyor:
cat -> bu bir kategori
color -> bu bir renk seçeneği
size_wrap -> bu bir beden listesi
size_value -> bu bir beden listesindeki bir beden seçeneği
feature_wrap -> Bu bir özellik listesi
feature value -> Bu bir özellik listesindeki bir özellik seçeneği

Özellik listeleri ve seçeneklerini açmak gerekirse;
Admin panelinden t-shirt kategorisinde kullanılmak üzere Kumaş Türü adında bir özellik listesi oluşturulur ve bu listeye seçenekler girilir. Örneğin; Penye, saten, dantel, gabardin ....
Listedeki seçeneklerin parent sütununa, seçeneklerin ait olduğu liste id'si yazılır. Sonra bu liste Erkek -> giyim -> t-shirt kategorisi ile ilişkilendirilir. Bir özellik listesi birçok kategori ile de ilişkilendirilebilir.
Bu ilişki şu anda listenin parents sütununa kategori id'lerinin yazılması şeklinde yapılmıştır (21,22,35,x,x,x).
Ve admin isterse şu ayarlamayı yapabilir: T-shirt kategorisine tıklandığında Kumaş türü listesi filtre olarak kullanılabilsin.

Beden listeleri ve renk seçenekleri kategoriler ile ilişkilendirilmez. Renk seçeneklerinin üst kategorisi de yoktur, diğer kategorilerden bağımsızdır.

Admin ürün eklerken;
1 - Ürün bedenli ise beden listelerinin tamamı bir selectboxla listelenir. Eklenen bir t-shirt ise Selectboxtan önceden kategori tablosuna kaydı eklenen t-shirt bedenleri listesini seçer.
2 - T-shirt listesindeki bedenlerinin beden seçenekleri yanlarında bu bedenin bu ürün için geçerli olup/olmadığının belirtileceği bir checkbox ve bu t-shirtün ilgili bedendeki stok sayısının yazılacağı bir textbox ile listelenir.
3 - T-shirtte kullanılacak olan bedenler ve stok sayıları stok tablosuna yazılır. Ürün bedenli değilse size_wrap_id sütununa -1 yazılır.
4 - Bu bedenler aynı zamanda kategori de olduğu için product_extend_cat tablosunda ürün id'si ile ilişkilendirilir (stok sayısı 0'dan büyük olanlar).
5 - Daha önce kategori tablosuna eklenmiş olan renk seçeneklerinden t-shirtün rengi seçilir. (T-shirt 3 yoğun renkten oluşuyorsa 3 renk de seçilebilir).
6 - Seçilen renkler de product_extend_cat tablosunda ürün ile ilişkilendirilir.
7 - Ürünün ait olduğu kategoriler seçilir ( bunlar da ürünle product_extend_cat tablosunda ilişkilendirilir. )
8 - Seçilen kategorilerle ilişkili özellik listesi varsa bu aşamada bu listeler de forma dahil edilir. Örneğin t-shirt kategorisi seçildiyse adminin daha önce bu kategoriye bağladığı kumaş türü listesindeki seçenekler checkboxlarla veya multiple selectboxla listelenir.
Bu aşamada admin listeden birden fazla seçenek seçebilir (T-shirt penye ise omuzları dantelliyse hem penye hem de danteli işaretleyebilir). Seçilen seçenekler de product_extend_cat tablosunda ürün ile ilişkilendirilir.
.

İsteiğimiz şudur:

Ziyaretçi arayüze girdi ve T-shirt kategorisine tıkladı. Ekranın sağında t-shirt kategorisi ürünler listelendi, solunda beden, renk ve varsa t-shirt kategorisinde filtre olarak kullanılacak özellik listesi ve seçenekleri listelenir.
1 - Soldaki renk filtresinde sadece t-shirt kategorisine eklenen ürünlerde bulunan renk seçenekleri listlenmelidir.,
2 - Soldaki numara/beden filtresinde Sadece t-shirt kategorisine eklenen ürünlerde stokta bulunan bedenler listelenmelidir.
3 - T-shirt kategorisinde filtre olarak kullanılabilir olarak belirttiğimiz Kumaş türü listesinde sadece t-shirt kategorisine eklenen ürünlerde stokta bulunan kumaş seçenekleri listelenmelidir.
4 - Kategoriye ek olarak bir de beden seçildiğinde renk seçenekleri de seçilen filtre ve kategoriyle ilişkili ürünlerde bulunan renkler olarak güncellenmelidir. Kumaş türü listesinden de mesela dantel seçilirse. Renk seçeneklerinde sadece dantelli t-shirlerde bulunan renkler bulunmalıdır.

Velhasıl kelam ekranın solundaki hiçbir filtreleme seçeneğine tıklandıktan sonra ürün bulunamadı gibi bi yazı yazdırmamalıyım. Siyah renk seçeneği yoksa müşteri siyaha tıklayamaz ve biz de ürün bulunamadı demek zorunda kalmayız, istediğimiz budur.


Bire bir aynı olmamakla birlikte, istediğime benzer bir yapıyı şu site (https://www.ayakkabidunyasi.com.tr/gunluk-ayakkabi/) kullanmış.
Herhangi bir kategori seçildiğinde sadece o kategorilerdeki ürünlerde bulunan renk seçenekleri ve bedenler listeleniyor. Bir de beden seçtiğinizde renk filtresindeki renk seçeneklerinin de azaldığını göreceksiniz. Ya da tam tersi renk seçtiğinizde beden seçeneklerinni azaldığını göreceksiniz. Ama filtrelerden hangisine de tıklasanız mutlaka bulunan bir ürün olacak sağ tarafta. Sol tarafta hiç boş kategori veya filtre seçeneği yok.


Neleri değiştirmeli, nasıl tablo(lar) eklemeli ve sorguyu nasıl yapmalıyım?

Daha önce benzer bi konuda yardımcı olmuş bikaç arkadaşı aflarına sığınarak etiketliyorum;
selcukhoca; sesusera;


Saygılar
.

Reox
21-07-2017, 00:12:04
hocam örnek kod ve örnek bir filtreleme koyabilirseniz yardımcı olurum fakat böyle yardım etmek mümkün değil

codeksper
21-07-2017, 00:43:14
hocam örnek kod ve örnek bir filtreleme koyabilirseniz yardımcı olurum fakat böyle yardım etmek mümkün değil

Hocam haklısınız soruya bu haliyle cevap vermek gerçekten de zor ama nasıl bir tablo oluşturmam gerektiğini bilmediğim için sorguyu yapacağım bir tablo oluşturamadım henüz.

Ama istediğim sorgu şöyle bişey.

id'si 5 olan kategoriye tıklandı, şimdi ben kategori tablosunda bulunan kategorileri renkleri ve bedenleri çekçem ama öyle bi çekçem ki renklerin hepsi değil sadece 5 id'li kategoride bulunan ürünlerde var olan renkleri ve aynı şekilde bedenleri çekçem.

SELECT * FROM category WHERE data_type IN('color','size_value');

Sorun şu ki bu bize tüm renk ve beden seçeneklerini getircek benim istediğimse bi şekilde tablolar arasında ilişkiyi gösteren bir tablo daha kurup.

"evet renkleri ve beden seçeneklerini getir ama sadece id'si 5 olan kategorinin altına eklenmiş olan ürünlerin renklerini ve bedenlerini getir" diyebilmek.

--R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 00:43:14 -->-> Daha önceki mesaj 00:37:11 --

T-shirt kategorisi seçildi diyelim. Benim sitemde de sadece 2 tane t-shirt var ve renkleri siyah ve beyaz. Bana sadece siyah ve beyaz renk seçeneğini getirsin. Yine t-shirt kategorisinde var olan t-shirtlerden birinin sadece S bedeni diğerinin sadece S,M,L bedenleri var. Bana sadece S,M,L bedenlerini getirsin. Kategori tablosunda t-shirtlerde kullanılabilen XL bedeni de var aslında ama stokta bulunmadığı için bana XL'yi getirmesin.

----

Seçilen filtrelere ürünleri çekmek için yine R10'dan arkadaşların yardımıyla şöyle
$q = $db->query("SELECT c1.* FROM store_product_extend_cat as c1
INNER JOIN store_product_extend_cat AS c2
ON c1.product_id=c2.product_id
INNER JOIN store_product_extend_cat AS c3
ON c1.product_id=c3.product_id
WHERE (c1.cat_id=75 OR c2.cat_id=76) AND (c3.cat_id=73 ) AND (xxxxxx)
GROUP BY c1.product_id
");

bi sorgu kullandıktan sonra bu filtre seçeneklerinin filtrelenmesi için nasıl bi sorgu kullancaz aklım mantığım almadı bi türlü. Ki burda şimdilik sadece ürün id'lerini veriyo bi de ürünler tablosu eklencek daha sorguya. Soru da karmaşık oldu biraz affola. Ama yine de yardımlarınızı bekliyorum : (

selcukhoca
21-07-2017, 16:47:59
İstenilenler doğrultusunda, filtreleme seçeneklerinin ürünler listesinden hareketle oluşturulması gerekiyor gibi geldi bana. Elimizde önceki sorgudan gelen product_idler olduğuna göre bunları kullanarak filtreleri filtreleyebiliriz.

Select * from product_extend_cat where product_id=$id

şeklinde bir sorgu bir ürüne ait kategorileri, seçenekleri getirecektir. Birden fazla üründe bu bir döngüye sokulabilir. Gelen kategoriler distinct veya group kullanarak teke düşürülebilir. Fakat ürün sayısı arttıkça (Binlerce ürün olabilir.) performans ne olur bilemiyorum.