我有一个产品表,现在我想在用户搜索商品时计算总结果,而不是在产品表中计算总商品数。
示例:
假设产品表中有4行,并且进行了SQL查询以匹配产品标题字段,描述字段和商品编号字段:如果搜索返回2行,我如何计算此结果,以便可以将其用于分页目的?
下面是正在使用的sql查询:
$titleSQL[] = "if (title LIKE $key,$scoreTitleKeyword,0)";
$descSQL[] = "if (description LIKE $key,$scoreDescriptionKeyword,0)";
$ItenNoSQL[] = "if (item_number = $nowildcardKey,$scoreItemNumberKeyword,0)";
$sql = "SELECT
p.product_id,
p.title,
p.price,
p.unit_sold,
p.slug,
p.discount,
p.free_shipping,
free_return,
p.profile_img,
p.store_name,
p.item_number,
(
(-- Title score ".implode(" + ", $titleSQL).")+
(-- description ".implode(" + ", $descSQL).")+
(-- item number ".implode(" + ", $ItenNoSQL).")+
(-- category id ".implode(" + ", $catIdSQL).")
) as relevance
FROM products p
WHERE p.is_active = '1'".$sortpriceHighLow."
HAVING relevance > 0
ORDER BY ".$orderBy." relevance DESC
LIMIT 10";
如果用户搜索从结果查询返回2行,我想使用COUNT函数,这样我可以得到2行,但看不到它能正常工作...
我尝试过:
$sql = "SELECT COUNT(*),
(
(-- Title score ".implode(" + ", $titleSQL).")+
(-- description ".implode(" + ", $descSQL).")+
(-- item number ".implode(" + ", $ItenNoSQL).")+
(-- category id ".implode(" + ", $catIdSQL).")
)
FROM products p
WHERE p.is_active > '1'";
但是选择了数据库中的所有查询,而不是根据搜索结果
答案 0 :(得分:0)
您似乎想要:
SELECT COUNT(*),
FROM products p
WHERE p.is_active > '1' AND
(
(-- Title score ".implode(" + ", $titleSQL).")+
(-- description ".implode(" + ", $descSQL).")+
(-- item number ".implode(" + ", $ItenNoSQL).")+
(-- category id ".implode(" + ", $catIdSQL).")
) > 0;
但是,您可能只需要SELECT SQL_CALC_FOUND_ROWS . . .
和SELECT FOUND_ROWS()
(请参阅here)。这是更典型的分页方法。