所以我选择了如何按优先顺序排序,但现在我遇到了麻烦。
我的代码如下:
$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(提供)。但我们也有一个优惠期,所以即使该产品被假定提供,它仍然必须在优惠期内。
我有什么想法可以让它发挥作用?我仍然想让它显示它并根据相关性对其进行排序