Nasıl bir online mağaza için ürün ve ürün görüntü verilerini saklamak gerekir?

3 Cevap php

MySQL PHP ile bir vitrin uygulaması üzerinde çalışıyorum. Şu anda 4 tablolarında benim veri depolama ediyorum: ürün hatları için bir tane, bu ürün çizgilerin içinde belirli ürünler için bir tane, ürün görüntüler için bir, ve görüntüler hangi spesifik ürünlere bağlı belirten bir tane. Her özel ürün bir ürün hattına ait, her ürün görüntü birkaç belirli ürünlere ait olabilir ve her bir spesifik ürün birkaç görüntü olabilir. Benim tablo şöyle:

ProductLines
    id, name, description, etc.
SpecificProducts
    productLineID
    id, color, size, etc.
ProductImageLinks
    specificProductID
    imageID
Images
    id, imageFileLocation, name, etc.

Bu güzel, bu şekilde çalışıyor, ancak alma amaçları için çok etkili değil gibi görünüyor.

Örneğin, ben bu ürün hattından rasgele seçilen bir görüntünün küçük resim ile birlikte her bir ürün hattını listeleyen bir sayfa var. Ben her şeyden önce ürün hatları listesi için veritabanını sorgulamak zorunda yapmak için, daha sonra each product line görüntüleri ilişkili olan özel ürünlerin tüm almak için bunlardan birini seçmek için ayrı bir sorgu gerçekleştirmek ve görüntü almak için tekrar sorgulamak.

Ben kabul başka bir olasılık belirtmek görüntü bağlantıları tüm almak için ben bu ürün bütün satırlar için tüm özel ürünler almak için ikinci bir sorgu, bakıyorum tüm ürün hatları, üçüncü bir sorgu almak için bir sorgu kullanmak olacaktır görüntüler hangi spesifik ürünler ve tüm bu görüntüleri almak için dördüncü bir sorgu bağlanmış olan. Ben bu, çünkü sorgular azaltılmış sayısı biraz daha hızlı olacağını hayal, ama o kadar yavaş olabilir ki, ürün ve ürün ve görüntüler arasındaki bağlantıları bulmaktan yapmak için PHP için bir sürü iş bırakacaktı.

Yani benim soru, bu verileri depolamak için daha iyi bir yolu var mı? Veya veritabanına dayalı onu almak için daha iyi bir yolu zaten yerinde var? Ya da ben tespit ettik iki seçenekten biri benim en iyi bahis gerçekten?

Düzenleme: Ben aslında veritabanında görüntü dosyalarını depolamak değilim. Görüntü dosyaları dosya sisteminde saklanır. Veritabanında Benim "Görüntüler" tablosu sadece vb görüntü başlığı, alt metin gibi yararlı bilgi ile birlikte görüntü dosyasının konumunu saklar

3 Cevap

Evet - sadece bir çekimde tüm bu bilgileri almak olacak tek bir sorgu yazmak.

Ben bu konuda biraz paslı değilim, ama mysql referans sorguları arama yapabilirsiniz.

  1. uygun anahtarlar bu tabloları birleştiren bir sorgu oluşturabilirsiniz
  2. Eğer () rand tarafından ilk belirli bir sorgu için görüntüleri alır bir alt sorgu öğeyi ve ardından sırası seçin ve ilk seçmeniz gerekir.

Bu kesinlikle tek bir sorguda yapılabilir. O her zaman, bazen daha okunabilir böylece sorguları düzenlemek için daha iyi bir yolu olan görünümler oluşturabilirsiniz edemez bile. Diğer bir deyişle, yerine sorgu sonucu dönen, sadece ilk sorguya karşılık gelen bir görünüm oluşturabilirsiniz. Sonra ilk sorgunun sonucu ikinci sorguyu çalıştıran karşılık bir görünüm oluşturmak, bu görünümü kapalı çalışır. Ve böylece. Sonra, aslında sorgu son görünümünden alarak tek seferde yapılabilir.

Bildiğim kadarıyla veritabanı tasarımı giderse, oldukça sağlam (ve standart) bir tasarıma sahiptir. Bu sürece bazı sorguları kaydetmek için bir 1:1 ilişki var gibi ProductImageLinks ve Görüntüler tabloları birleştirmek olabilir.

Ürün hattı görüntü alımı için olduğu gibi, büyük ölçüde gerekli sorguları sayısını azaltacak birkaç seçeneğiniz var:

  1. ProductLineImages denilen veritabanında yeni bir tablo oluşturun. Bunun yerine ilişkili ürünlerden rastgele görüntü toplama, aralarından rastgele seçebilirsiniz orada görüntüler bir dizi yükleyin. Bu şekilde dinamik olmayacak, ama bu en etkili yöntemdir.
  2. Eğer sorgu (# 1 den daha az verimli) bir tek tarif ne tüm yapabilirsiniz.

Eğer mysql veritabanında görüntüleri saklamak ayarlanır?

Benim, benzer bir uygulamanın, ben sadece farklı Küçük boyutları için, "büyük", vb in / imagesize "küçük" images / ürün resimleri / imagesize / productid.jpg depolanan görüntüleri ve productid.jpg SpecificProducts tablodan id