karmaşık mantık ifade ayrıştırmak ve php, arama yapmak

0 Cevap php

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.

0 Cevap