工作日记 1:TP5制作流量统计页面

文章讲述了如何解决MySQL在执行查询时遇到的`sql_mode=only_full_group_by`错误,提供了解决方案,包括修改配置文件。同时,介绍了子查询的两种构建方式:通过buildSql和使用闭包。还提到了正则表达式匹配图片的IMG标签以及在TP5.1框架中遇到的一个关于分组查询的不寻常问题。
摘要由CSDN通过智能技术生成

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 INEXISTS/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(); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值