Tricky sorgu çözüm

3 Cevap php

Herkes bu sayfada sonuçları taklit edecek bir ürün filtreleme sorgu (veya sorgu) oluşturmak konusunda herhangi bir fikrin var mı?

http://www.emag.ro/notebook%5Flaptop

Explanation

Eğer bir marka olarak HP basarsanız, sayfa size tüm HP ürünlerini gösterecek ve mevcut filtrelerin kalanı bu sorgu sonucu elde edilir. Ince ve züppe bugüne kadar, ben bu w herhangi bir sorun / o yaladı var.

Basın 4GB Ram, ve sizin tabii bu özellik / özelliğe sahip tüm HP ürünlerini göreceksiniz. Yine ince ve züppe, burada kadar hiç problem var.

Eğer Marka özellikleri şimdi de gösteriyor ki göreceksiniz yakından bakarsanız ANCAK, Acer sonra birkaç 4GB özelliği ile ürünleri, ve belki daha fazla olan, en Acer diyelim, ve onay kutusunu henüz basılı değil.

Akla gelen tek ideea bu diğer olasılıklar sonuçlar elde etmek için veritabanına çok daha sorguları yapmaktır.

Eğer 3. olası seçeneği (en Ekran boyutu diyelim) denetimini başlatmak sonra işler daha da karmaşık hale başlar.

I guess my question is: Does anyone has any idea on how to make this w/o taxing the server with tons of queries ?

Ben tüm bu küçük hikayede kendimi açıkça umut, uzak bu okuma için çok teşekkür ederim.

3 Cevap

Gerçekten sorguları "ton" değil, bu öznitelik türü (marka, RAM, HDD) başına bir sorgu var. Diyelim ki HP, 4GB RAM ve 250GB diski seçtiniz diyelim. Şimdi mevcut türüne göre sonuçlarına göre, her öznitelik türü seçin ürünler için filtre göre, except geçerli türü için, ve grup. Basit bir modelde, sorguları bu gibi görünebilir:

SELECT brand, count(*) FROM products WHERE ram='4BG' AND disk='250GB' GROUP BY brand
SELECT ram, count(*) FROM products WHERE brand='HP' AND disk='250GB' GROUP BY ram
SELECT disk, count(*) FROM products WHERE brand='HP' AND ram='4BG' GROUP BY disk
SELECT cpu, count(*) FROM products WHERE brand='HP' AND ram='4BG' AND disk='250BG' GROUP BY cpu
...

Her sorgu masanın üzerinde sıralı tarama yapmaz, sütunlar üzerinde dizinler olmalıdır. Tabii ki bazı "popüler" kombinasyonları vardır ve büyük olasılıkla kullanıcı listede gezinme / sıralama, birden çok sayfada aynı numaralarını görüntülemek zorunda kalacak, bu yüzden sayıları önbelleğe ve güncelleştirme / ekleme / silme üzerinde önbellek geçersiz isteyebilirsiniz .

Bu kriterlerden bir sonucu bazı bilgisayarlı mesafeyi belirleyen bazı gelişmiş araç olduğunu olabilir, ama belki sorguda bir OR kullanarak ziyade VE kadar basittir.

Sql bir göz atın

UNION

sözdizimi.

"UNION tek bir sonuç setinde birden çok SELECT deyimleri sonucunu birleştirmek için kullanılır."