相同的查询结果是本地的值,但在服务器上它显示null结果

时间:2014-01-06 10:06:17

标签: mysql

以下查询在本地phpmyadmin上运行完美,但在服务器phpmyadmin上无法运行

select t.fk_user_id,
  t.target_month,
  t.target,
  e.ce_recruiter_id,
  e.billing_amount
from target t
left join closure_employee e
  on t.fk_user_id = e.ce_recruiter_id
  and month(t.target_month) = month(e.offer_date)
  and e.offer_date > DATE_SUB(now(), INTERVAL 7 MONTH)
where t.target_month > DATE_SUB(now(), INTERVAL 7 MONTH) and t.fk_user_id ='31'

本地结果:

fk_user_id  target_month  target  ce_recruiter_id  billing_amount   
31           2013-07-01   100000    NULL            NULL
31           2013-08-01   100000    31          390000
31           2013-09-01   100000    31          208354
31           2013-10-01   120000    NULL            NULL
31           2013-11-01   120000    NULL            NULL
31           2013-12-01   120000    NULL            NULL

服务器结果:

fk_user_id  target_month  target  ce_recruiter_id  billing_amount   
31           2013-07-01   100000    NULL            NULL
31           2013-08-01   100000    NULL            NULL
31           2013-09-01   100000    NULL            NULL
31           2013-10-01   120000    NULL            NULL
31           2013-11-01   120000    NULL            NULL
31           2013-12-01   120000    NULL            NULL

我如何在服务器上获得本地结果。 请帮忙。

4 个答案:

答案 0 :(得分:0)

首先确认数据是否相同。如果是,则在本地修改后确认data is committed or not

答案 1 :(得分:0)

我们无法为您提供问题的确切解决方案,因为我们不了解您的数据和/或服务器配置的许多内容......但最简单的解决方案应该是检查您使用的每个条件你的“where”陈述单独找出哪个失败了。

select e.* from target t 
left join closure_employee e on t.fk_user_id = e.ce_recruiter_id
where t.fk_user_id ='31'

select e.* from target t 
left join closure_employee e on t.fk_user_id = e.ce_recruiter_id and month(t.target_month) = month(e.offer_date)
where t.fk_user_id ='31'

select e.* from target t 
left join closure_employee e on t.fk_user_id = e.ce_recruiter_id and month(t.target_month) = month(e.offer_date) and e.offer_date > DATE_SUB(now(), INTERVAL 7 MONTH) 
where t.fk_user_id ='31'

依旧...... 也许这会告诉你问题在哪里

答案 2 :(得分:0)

如果您确定两台服务器上的数据相同,那么查询中唯一不同的组件是Now()函数,所以我猜这里和那里的时间不同。你能在服务器上做select now()吗? (或类似的东西。)

另外,我发现在连接中使用大于运算符(>)的情况很奇怪。你真的需要吗? AFAIC,它使查询非常不稳定和不可预测。我有一种感觉,你打算把它放在where子句中。

答案 3 :(得分:0)

首先谢谢大家特别是@tuffkid。 问题是offer_date数据类型为varchar所以我已将其更改为datetime并且问题已解决。我知道这是一个愚蠢的错误,但我只关注表中的数据而不是数据类型。