1. 在写查询语句是mysql报错如下:
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'xxx.xxx_xxx.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
代码如下:
$model = db('xxxxx')
->field('*,count(distinct ip) today')
->whereTime('time','today')
->group('id')
->select();
解决办法:
1、找到mysql的配置文件 my.ini (一般在mysql根目录)
2、在my.ini 中将以下内容添加到 [mysqld]下
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
3、重启mysql服务
子查询:
一、通过
buildSql
构造子查询再进行构造新的查询1、使用
buildSql
构造子查询$subQuery = Db::table('think_user') ->field('id,name') ->where('id', '>', 10) ->buildSql();
2、使用子查询构造新的查询
Db::table($subQuery . ' a') ->where('a.name', 'like', 'thinkphp') ->order('id', 'desc') ->select();
二、使用闭包构造子查询
IN/NOT IN
和EXISTS/NOT EXISTS
之类的查询可以直接使用闭包作为子查询,例如:Db::table('think_user') ->where('id', 'IN', function ($query) { $query->table('think_profile')->where('status', 1)->field('id'); }) ->select();
正则匹配:图片的IMG标签
正则规则:/<img.*?src=('|\")(.*?)('|\").*?>/
PHP函数:preg_match_all(正则规则,字符串,结果容器)
奇怪的错误(未知)、TP框架的5.1:
$model = model('data')->group('id');
$count = $model->count();
$result = $model->select();
按道理这个$count 和 $result 是能够查询出来的,但是!这么查的时候$result 变成了一个查询语句的字符串,并没有返回查询的结果,导致这个问题的原因目前还未知。分成两个查询语句就变的正常了。
distinct:用于返回唯一不同的值
Db::table('think_user')->distinct(true)->field('user_login')->select();
文章评论