ThinkPHP,left join之表名,表字段指定

有事先上图:



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

ThinkPHP,left join之表名,表字段指定_第1张图片

你可能感兴趣的:(thinkphp,left,join之表名,表字段指定)