一条MySQL语句统计多个字段

测试数据表demo

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for test_order
-- ----------------------------
DROP TABLE IF EXISTS `test_order`;
CREATE TABLE `test_order` (
  `id` int(11) NOT NULL,
  `order_no` varchar(32) DEFAULT NULL COMMENT '订单号',
  `user_id` int(11) DEFAULT NULL COMMENT '用户id',
  `shop_id` int(11) DEFAULT NULL COMMENT '商家id',
  `status` tinyint(1) DEFAULT NULL COMMENT '订单状态 0待发货 1已发货 2已收货 3已评论 4申请退款',
  `create_time` int(10) DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of test_order
-- ----------------------------
INSERT INTO `test_order` VALUES ('1', 'aaaaaaaaa', '11', '111', '1', '1573041313');
INSERT INTO `test_order` VALUES ('2', 'bbbbbbbbb', '11', '222', '1', '1573041313');
INSERT INTO `test_order` VALUES ('3', 'ccccccccc', '11', '333', '2', '1573041313');
INSERT INTO `test_order` VALUES ('4', 'ddddddddd', '11', '222', '3', '1573041313');
INSERT INTO `test_order` VALUES ('5', 'eeeeeeeee', '11', '111', '4', '1573041313');
INSERT INTO `test_order` VALUES ('6', 'fffffffff', '11', '111', '3', '1573041313');
INSERT INTO `test_order` VALUES ('7', 'ggggggggg', '11', '222', '4', '1573041313');
INSERT INTO `test_order` VALUES ('8', 'hhhhhhhhh', '11', '111', '0', '1573041313');
INSERT INTO `test_order` VALUES ('9', 'iiiiiiiii', '11', '333', '0', '1573041313');
INSERT INTO `test_order` VALUES ('10', 'jjjjjjjjj', '11', '222', '1', '1573041313');

表截图

微信截图_20201013180108.png
查询语句

SELECT
    count( CASE WHEN STATUS = 0 THEN 1 END ) AS '待发货',
    count( CASE WHEN STATUS = 1 THEN 1 END ) AS '已发货',
    COUNT( CASE WHEN STATUS = 2 THEN 1 END ) AS '已收货',
    count( CASE WHEN STATUS = 3 THEN 1 END ) AS '已评论',
    count( CASE WHEN STATUS = 4 THEN 1 END ) AS '申请退款' 
FROM
    test_order;

运行截图

微信截图_20201013180006.png

Shell基本语法

#定义一个变量
LNMP_Ver='1.6'

#输出一个变量
echo $LNMP_Ver
#在字符中嵌入变量一并输出
echo "这是一个${LNMP_Ver}变量"


#include 一个文件 注意 include 前面有个. 并且符合后面包含一个空格
. lnmp.conf
. include/main.sh
. include/init.sh
. include/mysql.sh
. include/mariadb.sh
. include/php.sh
. include/nginx.sh
. include/apache.sh
. include/end.sh
. include/only.sh
. include/multiplephp.sh



Get_Dist_Name(){
    echo "这是一个函数"
}

#调用一个函数(无参数)
Get_Dist_Name

文件锁

打开文件

fopen(file,chmod)
file:文件名称
chmod:打开权限
    "r" (只读方式打开,将文件指针指向文件头)
    "r+" (读写方式打开,将文件指针指向文件头)
    "w" (写入方式打开,清除文件内容,如果文件不存在则尝试创建之)
    "w+" (读写方式打开,清除文件内容,如果文件不存在则尝试创建之)
    "a" (写入方式打开,将文件指针指向文件末尾进行写入,如果文件不存在则尝试创建之)
    "a+" (读写方式打开,通过将文件指针指向文件末尾进行写入来保存文件内容)
    "x" (创建一个新的文件并以写入方式打开,如果文件已存在则返回 FALSE 和一个错误)
    "x+" (创建一个新的文件并以读写方式打开,如果文件已存在则返回 FALSE 和一个错误)

文件加锁/释放锁

flock(file,lock,block)
file:已经打开的文件资源
lock:锁的类型
    LOCK_SH:共享锁(读锁)
    LOCK_EX:独占锁定(排它锁,写锁)
    LOCK_UN:解锁
    LOCK_NB:如果希望在文件锁定时阻塞进程,那么需要加上该参数
block:设置为true的时候,锁定文件时,会阻止其他进程

关闭文件

flock(file)
file:打开的文件资源

用Navicat导出数据库的数据字典

USE information_schema;


SELECT
    C.COLUMN_NAME AS '字段名',
    C.COLUMN_TYPE AS '数据类型',
    C.IS_NULLABLE AS '允许为空',
    C.EXTRA AS 'PK',
    C.COLUMN_COMMENT AS '字段说明',
        C.TABLE_NAME AS '表名'
FROM
    COLUMNS C
INNER JOIN TABLES T ON C.TABLE_SCHEMA = T.TABLE_SCHEMA
AND C.TABLE_NAME = T.TABLE_NAME
WHERE
    T.TABLE_SCHEMA = '数据库名称'   

也可以在where条件后面指定表名称

and T.TABLE_NAME='表名称'

查询出的结果可以导出

自定义日志记录方法

    /**
     * [log 记录执行日志] 
     * @param  [type] $str   [description]
     * @param  [type] $count [description]
     * @return [type]        [description]
     */
    public function log($str,$count)
    {
        $date = date('Y-m-d H:i:s');
        $text = '-------------------------------------------------------------------'.PHP_EOL;

        if ($count > 0) {
            $text .= "|🐉[  {$str},时间:{$date},row:{$count}  ]🐉|".PHP_EOL;
        }else{
            $text .= "|🐍[  {$str},时间:{$date},row:{$count}  ]🐍|".PHP_EOL;
        }
        $dir = RUNTIME_PATH.'Timing';
        if (!is_dir($dir)) {
            mkdir($dir);
        }
        
        $file_name = $dir.'/Timing_'.date('Y_m_d').'.log';
        file_put_contents($file_name,$text,FILE_APPEND);
    }

观察者模式

<?php

/**
 * @Author: Fyang
 * @Email:  admin@fyang.vip
 * @Date:   2020-08-06 18:07:50
 * @Last Modified by:   峰扬
 * @Last Modified time: 2020-08-06 18:34:24
 * @Project_name:    test
 * Description    :    观察者模式
 */
/**
 * 登录完成后需要:
 * 1、发送短信
 * 2、发送邮件
 * 3、推送活动
 * 4、登录统计次数
 */


/**
 * 被观察者抽象类
 * 预定义一个准则类(接口) 所有后续完成的业务都需要继承此类(按照此准则工作)
 */
interface Subject{
    public function register(Observer $observer);

    public function notify();

}


/**
 * 被观察者
 * 实现被观察者抽象类
 */
class Action implements Subject{

    public $_observers = [];

    public function register(Observer $observer){
        $this->_observers[] = $observer;
    }

    public function notify(){

        foreach ($this->_observers as $observer) {
            $observer->watch();
        }

    }
 }



/**
 * 观察者接口
 * 预定义一个准则类(接口) 所有后续完成的业务都需要继承此类(按照此准则工作)
 */
interface Observer{

    //具体实现方法
    public function watch();
}





/**
 * 观察者
 * 1、发送短信
 */
class Sms implements Observer{
    public function watch(){
        echo "this Sms class".PHP_EOL.PHP_EOL;
    }
 }
 /**
 * 观察者
 * 2、发送邮件
 */
 class Email implements Observer{
    public function watch(){
        echo "this Email class".PHP_EOL.PHP_EOL;
    }
 }
 /**
 * 观察者
 * 3、推送活动
 */
 class Activity implements Observer{
    public function watch(){
        echo "this Activity class".PHP_EOL.PHP_EOL;
    }
 }
 /**
 * 观察者
 * 4、登录统计次数
 */
 class Count implements Observer{
    public function watch(){
        echo "this Count class".PHP_EOL.PHP_EOL;
    }
 }


$action = new Action;


$action->register(new Sms());
$action->register(new Email());
$action->register(new Activity());
$action->register(new Count());


print_r($action->notify());

Base64转回文件

上代码

$base_str = "data:audio/mp3;base64,//...[这是一条很长的base64格式的字符串]";
if (preg_match('/^(data:\s*audio\/(\w+);base64,)/', $base_str, $result)){
    $type = $result[2];//文件类型
    $save_file = "./".date('Ymd',time())."/";//保存路径
    if(!file_exists($save_file)){
        //检查是否有该文件夹,如果没有就创建,并给予最高权限
        mkdir($save_file, 0700);
    }
    $save_file = $new_file.time().".{$type}";
    if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base_str)))){
        
        dump($new_file);//结果
    }else{
        dump('失败');
    }
}

Mysql权限处理

查看用户信息

select `Host`,`user` from user;

mysql> select `Host`,`user` from user;
+-----------+------------+
| Host      | user       |
+-----------+------------+
| 127.0.0.1 | root       |
| ::1       | root       |
| localhost | root       |
+-----------+------------+
4 rows in set (0.00 sec)

创建一个用户
示例:create user '用户名'@'host权限' identified by '密码';

mysql> create user 'test'@'%' identified by 'MV5vVQUu';
Query OK, 0 rows affected (0.00 sec)

授予用户权限
示例:grant 权限类型(select、update、delete可多个,all 表示所有) privileges on 表名.操作权限(*表示所有) to '用户名'@'host权限'

mysql> grant all privileges on test_db.* to 'test'@'%';
Query OK, 0 rows affected (0.00 sec)

查询用户权限

mysql> show grants for test@'%';
+-----------------------------------------------------------------------------------------------------------+
| Grants for test@%                                                                                   |
+-----------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test'@'%' IDENTIFIED BY PASSWORD '*3EB9B6C888B00C67DA138D280D13B8C5129A1DD2' |
| GRANT ALL PRIVILEGES ON `test_db`.* TO 'test'@'%'                                                 |
+-----------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

取消用户权限
示例:revoke all on 表名.操作权限 from test@'%'

mysql> revoke all on test_db.* from test@'%';
Query OK, 0 rows affected (0.00 sec)

再次查看用户权限

mysql> show grants for test@'%';
+-----------------------------------------------------------------------------------------------------------+
| Grants for test@%                                                                                   |
+-----------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test'@'%' IDENTIFIED BY PASSWORD '*3EB9B6C888B00C67DA138D280D13B8C5129A1DD2' |
+-----------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

修改用户密码

//update 需要指定密码和password函数
//推荐方法 
ALTER USER test@'%' IDENTIFIED BY '123456';

最后别忘了刷新权限

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

mysql>

Linux中配置apache+php-fpm模式

先查找php-fpm.conf ,发现PHP的安装目录下没有该文件
在PHP安装目录下创建php-fpm配置文件,并输入以下内容(存在跳过此步骤)

[global]
pid = /www/server/php/70/var/run/php-fpm.pid
error_log = /www/logs/php/70/php-fpm.log
log_level = notice

[www]
listen = /tmp/php-cgi-70.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.status_path = /phpfpm_70_status
pm.max_children = 300
pm.start_servers = 20
pm.min_spare_servers = 20
pm.max_spare_servers = 50
request_terminate_timeout = 100
request_slowlog_timeout = 30
slowlog = /www/logs/php/70/slow.log

找到apache的配置文件,找到 php_module 项(代表你的PHP版本号)注释该项
再找到 mod_proxy.so 和 mod_proxy_fcgi.so 以及 mod_rewrite.so项,解除注释,启用模块

在apache配置文件中加载其它配置(比如网站域名配置)

IncludeOptional /www/server/apache/vhost/*.conf

php-fpm模式5.png

创建测试文件
在web站点根目录下创建index.php

创建文件夹

mkdir /www/wwwroot/build

创建文件

vim /www/wwwroot/build/index.php

在文件中输入以下内容

phpinfo();

保存退出#

创建apache的虚拟主机站点配置文件
在IncludeOptional 项指定的目录下创建一个任意文件名.conf的配置,我这里是index.conf

vim /www/server/apache/vhost/index.conf

输入以下内容 (注意内容中的路径是可以自定义的)#

<VirtualHost *:80>
    ServerAdmin webmaster@example.com
    DocumentRoot "/www/wwwroot/build" #这里指定web的根目录
    ServerName 192.168.1.3                #这里是web网站访问的域名
    ServerAlias 192.168.1.3            #这里也是web网站访问的域名
    errorDocument 404 /404.html     
    ErrorLog "/www/logs/www/1.error_log"  #这里是web网站访问的日志
    CustomLog "/www/logs/www/1.access_log" combined  #这里是web网站访问的错误日志

    #DENY FILES
     <Files ~ (\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)$>
       Order allow,deny
       Deny from all
    </Files>

    #PHP
    <FilesMatch \.php$>
            SetHandler "proxy:unix:/tmp/php-cgi-70.sock|fcgi://localhost"
    </FilesMatch>

    #PATH
    <Directory "/www/wwwroot/build"> #这里指定web的根目录
        SetOutputFilter DEFLATE
        Options FollowSymLinks
        AllowOverride All
        Require all granted
        DirectoryIndex index.php index.html index.htm default.php default.html default.htm
    </Directory>
</VirtualHost>

修改所有新创建的文件所属权

重启apache
启动php-fpm

/www/server/php/56/sbin/php-fpm
/www/server/php/70/sbin/php-fpm

浏览器输入地址
访问成功