如何在MySQL查询中使用数学公式?
我正在创建一个CPM,我正在尝试获得所有不在轨道上的CPM。我有下面的代码,我把公式放在WHERE子句中,但它显示了所有结果。而不仅仅是小于0.9的结果如何在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
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