如何在MySQL查询中使用数学公式?

时间:2019-05-12 04:01:26

标签: mysql

我正在创建一个CPM,我正在尝试获取所有未按计划进行的CPM。我下面有以下代码,并将公式放在WHERE子句中,但是它显示了所有结果。不仅是结果小于0.9。

SELECT cpms.*, site_images.*

FROM ( cpm_images

INNER JOIN site_images ON ( cpm_images.site_image_id = site_images.site_image_id ) )

INNER JOIN cpms
  ON
    ( cpms.cpm_id = cpm_images.cpm_id )
WHERE (  
    ( cpms.cpm_views_count * ( $data - cpms.cpm_date_start ) ) /
    ( cpms.cpm_views_total * (cpms.cpm_date_end - $data ) )
      ) < 0.9 

无论计算出多少数字,它都会显示所有结果。如果数字小于0.9,则显示;如果数字大于0.9,则显示。

更新: 以下数据是从数据库中提取的。

This is the data from the table.

[cpm_id] => 1
[cpm_title] => Ad Special
[cpm_date_start] => 1556746806
[cpm_date_end] => 1559425206
[cpm_views_total] => 1000
[cpm_views_count] => 500
[cpm_image] => 
[cpm_active] => 1
[site_image_id] => 137
[site_image_file] => cars/3.jpg
[site_image_file_tn] => cars/3.jpg
[site_image_file_org] => cars/3.jpg
[site_image_title] => 
[site_image_description] => 
[site_image_upload_date] => 0

当我将数字代替表格行名称时     (500 *(1557665447-1559425206))     /     (1000 *(1556746806-1557665447))

它有效,因此表行名称可能没有显示为int。表格如下

`cpm_id` int(11) UNSIGNED NOT NULL,
`cpm_title` varchar(255) NOT NULL,
`cpm_date_start` int(11) NOT NULL,
`cpm_date_end` int(11) NOT NULL,
`cpm_views_total` int(11) NOT NULL,
`cpm_views_count` int(11) NOT NULL,
`cpm_image` varchar(255) DEFAULT NULL,
`cpm_active` int(1) DEFAULT NULL

如果我有电话号码

( 0 * ( 1557665447 - 1559425206 ) )  /  ( 1000 * ( 1556746806 - 1557665447 ) )

等于0,因此显示为低于0.9 但是如果我有以下要求

( 1000 * ( 1557665447 - 1559425206 ) )  /  ( 1000 * ( 1556746806 - 1557665447 ) )

等于结果中显示的1.91561121265,但不应小于0.9,而不应该显示

更新: 如果我使用以下

WHERE ( ( cpms.cpm_views_count * ( 1557665447 - 1559425206 ) )  /  ( cpms.cpm_views_total * ( 1556746806 - 1557665447 ) ) ) < 0.9

它有效,并且以下内容也可以

WHERE ( ( cpms.cpm_views_count * ( $date - 1559425206 ) )  /  ( cpms.cpm_views_total * ( 1556746806 - $date ) ) ) < 0.9

但是一旦我将其更改为

WHERE ( ( cpms.cpm_views_count * ( $date -  cpms.cpm_date_start  ) )  /  ( cpms.cpm_views_total * ( cpms.cpm_date_end - $date ) ) ) < 0.9

它不起作用,我什至尝试将括号放在cpms.cpm_date_end和cpms.cpm_date_start上,但仍然失败。

1 个答案:

答案 0 :(得分:0)

我发现了问题,我的cpm_views_start和cpm_views_end方向错误

( ( cpms.cpm_views_count * ( $date - cpms.cpm_date_end  ) )  /  ( cpms.cpm_views_total * (  cpms.cpm_date_start - $date) ) )

当我按如下所述放入时,我是怎么意识到的

 SELECT ( ( cpms.cpm_views_count * ( $date - cpms.cpm_date_end  ) )  /  ( cpms.cpm_views_total * (  cpms.cpm_date_start - $date) ) ) AS sum_2

它返回了另一个数字。我意识到在编码字符串的过程中,我改变了cpm_date_end和cpm_date_start的位置,但是在屏幕上进行测试的地方,这是正确的方式,因此屏幕上的数据是正确的,但是当它在查询,这是错误的方法。

感谢#nick竭尽所能帮助我。