一次诡异的 SQL 数量统计查询不准的问题
一个统计数量(有连表)的 SQL,加上条件若干假设结果为 N1,然后再加条件详细统计细分数量,诡异的来了,假设加的条件分别是 T1.F1 = T2.F2 和 T1.F1 != T2.F2,这两个细分 SQL 的结果 N2 和 N3 加起来竟然不等于 N1,那么漏掉的这部分数据是啥,想不通。
(1)问了同事yz,他提了一个可能,F1 和 F2 在 where 语句中使用了之后(非 is null 语句),结果就肯定不会包含 F1 为 null 或 F2 为 null 的值
(2)对此我只能说——所有的诡异都是无知的反应。
帖子列表时如何查询包含我的帖子
场景
用户发帖之后,需要审核通过之后才能被别人看到,同时审核中的帖子自己也能够看到,通过一个列表接口如何实现?
分析
这个列表接口数据应包含:所有审核通过的帖子 + 自己的审核中的帖子
现有一个帖子表 post
定义如下:
blog 自动发布脚本
新的博客使用 mweb 生成静态文件,然后写了一个自动发布的脚本,当在 mweb 中写完内容,并生成网站之后,直接执行下面的脚本文件,就能在网站上看到效果了:
#! /bin/bash
cd /Users/feiffy/Sites/mweb
# 忽略 assets 文件, 0-忽略,1-不忽略
withAssets=0
if [ -n "$1" ]; then
if [ "--with-assets" = $1 ]; then
withAssets=1
fi
fi
if [ ! -d "blog_deploy" ]; then
mkdir "blog_deploy"
fi
# clean
rm -rf blog_deploy/*
# copy
cp ./blog/* blog_deploy/
if [ $withAssets -eq 1 ]; then
cp -r ./blog/asset blog_deploy/
fi
# tar
tar -czf blog_deploy.tar.gz blog_deploy
echo 'uploading...'
# upload to server
scp blog_deploy.tar.gz <user>@<domain>:/var/www/upload
# deploy
ssh <user>@<domain> > /dev/null 2>&1 << eeooff
cd /var/www/upload
tar -xzf blog_deploy.tar.gz
rm blog_deploy.tar.gz
cp -r blog_deploy/* /var/www/html/
rm -rf blog_deploy
exit
eeooff
echo 'deploy succ'
Message: Illegal string offset
示例
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
$a = '';
echo $a['k'];
// Warning: Illegal string offset 'k'
$a = [];
echo $a['k'];
// Notice: Undefined index: k
PHPStorm 格式化部分代码的技巧
如果是格式化一个方法内的代码,只需要将方法最后的右大括号删除,然后再加上,就能自动格式化方法大括号内的代码了。
如果是一个if或while结构内的代码,操作同上,删除最后的右大括号再加上即可。
win10 搭建 php + apache 开发运行环境
我服了,作为一个4年的老 phper,当我想在 windows 上手动搭建环境还是遇到了好多问题,所以通过这篇记录下来,不要每次都是重新开始,每一次都要蹚一遍所有的坑!
php
在官网这个地址 https://windows.php.net/download/ 下载已编译好的php程序。里面同时提供了多个版本,当然选最新版的 php7.4,然后在 php7.4 里面又提供了4个版本,分别是:
- VC15 x64 Non Thread Safe
- VC15 x64 Thread Safe [√]
- VC15 x86 Non Thread Safe
- VC15 x86 Thread Safe
真是选择困难症啊,首先,win10是64位的,那肯定选x64,其次使用的是 apache,所以选择 thread safe 版本(原因请参考1),所以最终选择 VC15 x64 Thread Safe
。如下图1所示,点击下载那个 zip 压缩文件。直接浏览器下载比较慢,所以我把地址复制到迅雷下载会快很多。
解决安装electron卡在node install.js 不动问题
问题
如题
解决
打开终端,输入vim ~/.npmrc,在里面添加一行:
electron_mirror=https://cdn.npm.taobao.org/dist/electron/
然后再试一次安装就可以了。
参考
https://www.jianshu.com/p/28a0305ac187
https://www.cnblogs.com/tadx2/p/12259235.html(windows下的安装)
http://www.electronjs.org/docs/tutorial/installation
Uncaught TypeError: Cannot convert object to primitive value
最近发现我的博客页面移动端上下拉菜单失效了,调试了一下,只要一点击下拉菜单就会报这个错误:
下拉菜单使用 bootstrap,部分代码如下:
DataGrip 设置默认的返回结果集数量
初始设置是 500,我觉得有点多,所以设置为 10。如下图设置:
参考:
- https://www.jetbrains.com/help/datagrip/rows.html#making_all_rows_visible_proc> Set a number of rows in the result set To change this limit, open settings settings ∧+Alt+S and navigate to Database | Data Views. In the Limit page size to field, specify a new number. To disable the limitation, clear the Limit page size to checkbox.
Ubuntu 中 Apache 设置允许跨域
1.首先找到 httpd.conf 文件
找到 #LoadModule headers_module modules/mod_headers.so
把#注释符去掉(也有可能已经默认去掉了)
目的是开启apache头信息自定义模块
如果你是 Ubuntu,也可以执行下面的命令来开启这个模块:
$ sudo service a2enmod headers
2.找到你的虚拟主机文件 注意是被跨域的网站的 具体内容是这样的文件
Ubuntu PhpStorm 代码导航前进后退快捷键无效
18.04 命令行执行:
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-left "[]"
gsettings set org.gnome.desktop.wm.keybindings switch-to-workspace-right "[]"
Linux Jetbrains Datagrip 没有图标找不到
问题
系统版本:Ubuntu 18.04,Datagrip版本:2019.2
从官网下载的 tar.gz 解压之后,找到 datagrip.sh 就可以使用了。但是有个问题,它没有自动创建快捷方式,所以 dash 中搜索不到它,命令行也无法直接启动。
解决
解决方式其实很简单,datagrip 已经提供了生成快捷方式的工具:打开 datagrip -> Tools -> Create Desktop entry... / Create ⌘-line Launcher ... 即可
参考
Ubuntu ssh 自动登录脚本
首先,把本地的 ssh-keygen 生成的 ssh 公钥内容追加到你所要登录的服务器的 authorized_hosts 文件里面去,这样就可以直接 ssh 登录了。
然后在 /usr/local/bin/
目录下创建 docker-dev
文件,输入下面的命令:
#!/usr/bin/expect
set timeout 3
spawn ssh <username>@<servername>
send "cd /home/webserver/webapp/\r"
interact
然后给予执行权限,之后就可以直接执行登录
$ sudo chmod +x docker-dev
$ docker-dev
// login success
如果出现这个错误,说明 expect
没装,安装一下就好了
/usr/bin/expect: bad interpreter: No such file or directory
安装 expect
$ sudo apt install expect
参考
Linux 命令行显示当前 Git 分支
在 ~/.bashrc
文件中添加以下内容:
#show the current git branch
find_git_branch () {
local dir=. head
until [ "$dir" -ef / ]; do
if [ -f "$dir/.git/HEAD" ]; then
head=$(< "$dir/.git/HEAD")
if [[ $head = ref:\ refs/heads/* ]]; then
git_branch="(*${head#*/*/})"
elif [[ $head != '' ]]; then
git_branch="(*(detached))"
else
git_branch="(*(unknow))"
fi
return
fi
dir="../$dir"
done
git_branch=''
}
PROMPT_⌘="find_git_branch; $PROMPT_⌘"
PS1="\u@\h:\w\[\033[0;32m\]\$git_branch\[\033[0m\] \$ "
Win10 自定义 Git Bash 终端
在开发的过程中,我们可能需要使用大量的命令行工具,或者远程连接到服务器进程操作。然而,由于 Windows 自带的 CMD 和 PowerShell 都不太好用,而且在 Windows 下的命令又与 Linux 中的不太一样,而我们大部分使用的都是 Linux 服务器,所以就需要一个这样的命令行工具。
终端选择
在 Windows 下使用类似 Linux 命令的工具有很多,例如 Win10 上提供的 WSL(Windows Sub Linux),CygWin 以及 Git Bash。
WSL
WSL是微软提供的一套可以运行 Linux 环境而又不用加载虚拟机的子系统。使用WSL可以像使用 Ubuntu 一样的操作,而且还能访问 WIndow 上的文件系统。
CygWin
CygWin 是运行在 Window 平台的类 Unix 环境,CygWIn 通过将部分 Posix 条用转换成 Window 的 API 调用,从而实现相关功能。
Git Bash