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

如何在MySQL查询中使用数学公式?,mysql,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,我正在尝试获得所有不在轨道上的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 
当我用数字代替表格行名称时 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
 SELECT ( ( cpms.cpm_views_count * ( $date - cpms.cpm_date_end  ) )  /  ( cpms.cpm_views_total * (  cpms.cpm_date_start - $date) ) ) AS sum_2
如果我有电话号码

( 0 * ( 1557665447 - 1559425206 ) )  /  ( 1000 * ( 1556746806 - 1557665447 ) )
它等于0,所以它显示为低于0.9 但是如果我有下面的

( 1000 * ( 1557665447 - 1559425206 ) )  /  ( 1000 * ( 1556746806 - 1557665447 ) )
WHERE ( ( cpms.cpm_views_count * ( 1557665447 - 1559425206 ) )  /  ( cpms.cpm_views_total * ( 1556746806 - 1557665447 ) ) ) < 0.9
等于结果中显示的1.91561121265,但不应该小于0.9

更新: 如果我使用下面的

( 1000 * ( 1557665447 - 1559425206 ) )  /  ( 1000 * ( 1556746806 - 1557665447 ) )
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\u date\u end和cpms.cpm\u date\u start之间加上括号,但还是失败了。

我发现了问题,我的cpm\u视图开始和结束的方式是错误的

( ( cpms.cpm_views_count * ( $date - cpms.cpm_date_end  ) )  /  ( cpms.cpm_views_total * (  cpms.cpm_date_start - $date) ) )
我是如何意识到这一点的,当我把它放在下面

`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
 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为我所做的一切。

什么是$data?cpms.cpm_date_start和cpms.cpm_date_end是什么数据类型?$data是一个数字,类似于1557665447。它是UNIX日期格式。而且cpms.cpm_date_start和cpms.cpm_date_end都是整数,您的代码似乎是合理的。如果你能提供一些样本数据和预期/实际输出,那么解决问题就会容易得多。cpm_视图数=500-cpm_视图总数=1000-cpm_日期开始=1556746806-cpm_日期结束=1559425206如果我的值大于0.9,它就不会显示任何内容,不管这个数字是大于还是小于0.9,但是如果我的值小于0.9,无论结果如何,它都显示了这一点。500*1557665447-1559425206/1000*1556746806-1557665447这也等于0.957805606325