有事先上图:
PHP:
$count = $Activitysign->join('left join o2o_activity AC ON o2o_activity_sign.activity_id = AC.activity_id ')->where($map)->count();
getLastSql();
Mysql:
SELECT COUNT(*) AS tp_count FROM `o2o_activity_sign` left join o2o_activity AC ON o2o_activity_sign.activity_id = AC.activity_id WHERE ( `activity_id` = 37 ) LIMIT 1
提示如上图错误?
这个之前其他同事做的,今天维护发现了这个问题。
问题的描述大致意思是没有给activity_id指定详细的表名。哎这我就奇怪了,好多都是这么写的,这个咋这么提示。
于是我做出了我的第一次修改。
我把`activity_id`改为了'activity_id'
Mysql:输出查询,这次不报错了,但是结果不对。?
SELECT COUNT(*) AS tp_count FROM `o2o_activity_sign` left join o2o_activity AC ON o2o_activity_sign.activity_id = AC.activity_id WHERE ( 'activity_id' = 37 ) LIMIT 1
到这里就已经很明确了,是我们没有指定where条件中的activity_id的具体表名,造成的这样的模凌两可。
那该如何指定该activity_id的表名呢?
1,在left前面可以写一个字符串作为前面的表的简写。
2,where条件$map中直接写该字段所在表的全表名。
我们这里采用了1方法。
php代码:
<?php
$activity_id = (int)$this->_param('activity_id');
if ($activity_id) {
$map['ACS.activity_id'] = $activity_id;
}
$count = $Activitysign->join('ACS left join o2o_activity AC ON ACS.activity_id = AC.activity_id ')->where($map)->count(); // 查询满足要求的总记录数
mysql代码:
SELECT COUNT(*) AS tp_count FROM `o2o_activity_sign` ACS left join o2o_activity AC ON ACS.activity_id = AC.activity_id WHERE ( ACS.activity_id = 37 ) LIMIT 1