在PHP中需要有关优先搜索(按相关性排序)的帮助

时间:2016-01-29 15:21:55

标签: php sorting

所以我选择了如何按优先顺序排序,但现在我遇到了麻烦。

我的代码如下:

$qry = "SELECT p.ProductID, p.ProductTitle, p.ProductImage, p.ProductDesc, p.Price, p.Quantity, p.Offered, p.OfferedPrice, p.OfferStartDate, p.OfferEndDate, NOW() AS 'Today' 
,(case when p.ProductTitle LIKE '%$SearchText%' then 1 else 0 end) +
(case when p.ProductDesc LIKE '%$SearchText%' then 1 else 0 end) +
(case when cp.CategoryID = $catID then 1 else 0 end) +
(case when p.Offered = $productStatus AND p.OfferStartDate < NOW() AND p.OfferEndDate > NOW() then 1 else 0 end) +
(case when p.Offered = $productStatus AND p.OfferStartDate IS NULL AND p.OfferedPrice IS NULL then 1 else 0 end) +
(case when p.Price > $priceMin AND p.Price < $priceMax then 1 else 0 end) +
(case when p.OfferedPrice > $priceMin AND p.OfferedPrice < $priceMax then 1 else 0 end) as priority
FROM Product p INNER JOIN CatProduct cp ON p.ProductID = cp.ProductID 
WHERE p.ProductTitle LIKE '%$SearchText%' OR p.ProductDesc LIKE '%$SearchText%' OR cp.CategoryID = $catID
OR ( (p.Price > $priceMin) AND (p.Price < $priceMax) ) OR ( (p.OfferedPrice > $priceMin) AND (p.OfferedPrice < $priceMax) ) ";

if($productStatus == '0')
{
    $qry .= "AND p.Offered = $productStatus AND p.OfferStartDate IS NULL AND p.OfferedPrice IS NULL";
}
else if($productStatus == '1')
{
    $qry .=" AND p.Offered =$productStatus AND p.OfferStartDate < NOW() AND p.OfferEndDate > NOW() ";
}

$qry .= " ORDER BY priority desc";

我在这里要做的是创建一个搜索功能,根据相关性优先显示并显示为前几个结果。现在我无法按产品状态排序(提供或不提供)。 “提供”一个有效,但我似乎无法“不提供”工作。

要确定要提供或未提供的产品,有p.Offered = 0(不提​​供)或p.Offered = 1(提供)。但我们也有一个优惠期,所以即使该产品被假定提供,它仍然必须在优惠期内。

我有什么想法可以让它发挥作用?我仍然想让它显示它并根据相关性对其进行排序

0 个答案:

没有答案