Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL计数问题_Php_Mysql_Sql_Oscommerce - Fatal编程技术网

Php MySQL计数问题

Php MySQL计数问题,php,mysql,sql,oscommerce,Php,Mysql,Sql,Oscommerce,在我的应用程序(osCommerce)中,我必须修改如下所示的查询: SELECT sql_cache distinct p.products_image, p.products_subimage1, pd.products_name, p.products_quantity, p.products_model, p.products_ordered,

在我的应用程序(osCommerce)中,我必须修改如下所示的查询:

SELECT     sql_cache distinct p.products_image, 
           p.products_subimage1, 
           pd.products_name, 
           p.products_quantity, 
           p.products_model, 
           p.products_ordered, 
           p.products_id, 
           p.products_price, 
           p.products_date_added, 
           p.products_weight, 
           p.products_length, 
           p.products_width, 
           p.products_height, 
           p.products_tax_class_id, 
           p.products_status, 
           IF(s.status, s.specials_new_products_price, NULL)             AS specials_new_products_price,
           IF(s.status, s.specials_new_products_price, p.products_price) AS final_price 
FROM       products p 
LEFT JOIN  specials s 
ON         p.products_id = s.products_id 
LEFT JOIN  products_to_categories p2c 
ON         p.products_id=p2c.products_id 
LEFT JOIN  products_description pd 
ON         p.products_id=pd.products_id 
INNER JOIN filter_association_products fap 
ON         p.products_id =fap.products_id 
LEFT JOIN  products_attributes pa 
ON         p.products_id = pa.products_id 
WHERE      p.products_status = '1' 
AND        date_sub(curdate(),INTERVAL 3000 day) <= p.products_date_added 
AND        find_in_set(fap.filter_id,'126, 130')
ORDER BY   p.products_date_added DESC, 
           pd.products_name
我现在遇到的问题是,下面的查询使用了这个新查询,并给了我错误的结果

SELECT COUNT( DISTINCT p.products_id ) AS total
FROM products p
LEFT JOIN specials s ON p.products_id = s.products_id
LEFT JOIN products_to_categories p2c 
ON p.products_id = p2c.products_id
LEFT JOIN products_description pd 
ON p.products_id = pd.products_id
INNER JOIN filter_association_products fap ON p.products_id = fap.products_id
LEFT JOIN products_attributes pa 
ON p.products_id = pa.products_id
WHERE p.products_status =  '1'
AND DATE_SUB( CURDATE( ) , INTERVAL 3000 DAY ) <= p.products_date_added
AND fap.filter_id IN ( 126, 130 ) 
GROUP BY p.products_id
HAVING COUNT( DISTINCT fap.filter_id ) =2
ORDER BY p.products_date_added DESC , pd.products_name
选择计数(不同的p.products\u id)作为总数
来自产品p
左键连接p.products\u id=s.products\u id上的特价商品s
左连接产品到类别p2c
在p.products\u id=p2c.products\u id上
左连接产品描述
在p.products\u id=pd.products\u id上
内部联接筛选器\关联\产品p.products\U id=fap.products\U id上的fap
左连接产品属性
在p.products\u id=pa.products\u id上
其中p.products\u status='1'

和DATE_SUB(CURDATE(),间隔3000天)您需要使用子查询来获得所需的结果:

select count(*) 
from (<old query here>) s;
选择计数(*)
从()s;

您需要在产品id级别进行聚合,以获得满足原始条件的产品。计算此类产品的数量需要另一个聚合。

您需要使用子查询来获得所需的结果:

select count(*) 
from (<old query here>) s;
选择计数(*)
从()s;

您需要在产品id级别进行聚合,以获得满足原始条件的产品。计算这类产品的数量需要另一个聚合。

正如Gordon所建议的,使用子查询通常是可行的。 由于此查询看起来像一个产品列表查询,而且您正在使用osCommerce,因此当您修改查询以使用子查询时,将遇到另一个核心问题: 拆分页结果的计数查询将失败,因为它不支持子查询。 为了解决这个问题,您还需要修改
catalog/includes/classes/split\u page\u results.php中的核心代码

更改:

$count_query = tep_db_query("select count(" . $count_string . ") as total " . substr($this->sql_query, $pos_from, ($pos_to - $pos_from)));
致:


这里有更多详细信息:

正如Gordon所建议的,使用子查询通常是可行的。 由于此查询看起来像一个产品列表查询,而且您正在使用osCommerce,因此当您修改查询以使用子查询时,将遇到另一个核心问题: 拆分页结果的计数查询将失败,因为它不支持子查询。 为了解决这个问题,您还需要修改
catalog/includes/classes/split\u page\u results.php中的核心代码

更改:

$count_query = tep_db_query("select count(" . $count_string . ") as total " . substr($this->sql_query, $pos_from, ($pos_to - $pos_from)));
致:


此处的更多详细信息:

您需要使用子查询来获取所需的结果。您需要使用子查询来获取所需的结果。您的意思是我需要修改计数查询(第二个)?如果不影响应用程序的整个逻辑和其他不同编写的查询,我真的无法做到这一点。我正在寻找一种方法来修改原始查询,以便以下查询的计数仍然有效correctly@CreativeMind . . . 只需将其用作子查询。这是最简单的方法。你的意思是我需要修改计数查询(第二个)?如果不影响应用程序的整个逻辑和其他不同编写的查询,我真的无法做到这一点。我正在寻找一种方法来修改原始查询,以便以下查询的计数仍然有效correctly@CreativeMind . . . 只需将其用作子查询。这是最简单的方法。很好的发现!谢谢很好的发现!谢谢