使用count函数在sql中只计算搜索结果

xqkwcwgp  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(284)

我有一个产品表,现在我想计算用户搜索某个项目时的总结果,而不是计算产品表中的总项目。
例子:
假设我在product表中有4行,我做了一个sql查询来匹配product title字段、description字段和item number字段:如果搜索返回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行,我想使用计数函数,这样我可以得到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'";

但数据库中的所有查询都是选择的,而不是根据搜索结果

ktca8awb

ktca8awb1#

你似乎想要:

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() (参见此处)。这是比较典型的分页方法。

相关问题