Ben veritabanı (MySQL), her ürün çeşitli kategorilerde ait bir mal satan bir web sitesi ile çalışıyorum. Ben ürün kategorisi ilişkisini saklamak için bir çok-çok tablo eşleme kullanın.
ProductID CategoryID
1 1001
1 1002
1 1003
2 1001
2 1003
2 1005
Bu yaklaşım kategorilerine göre genel ürün araması için oldukça yalındır olduğunu düşünüyorum.
However, The internal user will search products by category in complex logic expression. e.g.:
input "(1001+1002)|1005" to find the products that belongs to category (1001 AND 1002) OR (1005). input "(1001+1002)|(1003+1004)" to find products belong to category (1001 AND 1002) OR (1003 AND 1004).
Sorgu dinamik olduğundan, bunu doğrudan SQL çevirmek için iyi olmadığını düşünüyorum. Benim yaklaşım (örneğin "(1001 1002 | 1005)") sorgu görünür ProductIDs ve CategoryIDs almak için:
SELECT ProductID, CategoryID FROM ProCatMap WHERE CategoryID IN (1001, 1002, 1005)
Daha sonra PHP nihai filtreleme yapmak.
After I select the ProductID-CategoryID records, I combine them into an array in the following format: $Relation[$ProductID] = array(CategoryID1, CategoryID2 .....); so for the data listed above, the array will be
$Relation[1] = array(1001,1002, 1003);
$Relation[2] = array(1001, 1003, 1005);
Benim soru nasıl dinamik mantık sorgu ayrıştırmak ve dizi üzerinde filtreleme yapmak için kod gerekir, olduğunu.
Sorgu yalnızca oluşur VE (+) ve OR (|) operatörleri ve parantez ve parantez her zaman dengeli vardır. (Örneğin her açık dirsek zorunluluktur sorguda yakın bir ayraç vardır).
Herhangi bir yardım son derece takdir edilmektedir.