MYSQL 查询某字段中包含逗号分隔的字符串的方法


首先我们建立一张带有逗号分隔的字符串。
CREATE TABLE test(id int(6) NOT NULL AUTO_INCREMENT,PRIMARY KEY (id),pname VARCHAR(20) NOT NULL,pnum VARCHAR(50) NOT NULL);

然后插入带有逗号分隔的测试数据
INSERT INTO test(pname,pnum) VALUES('产品1','1,2,4');
INSERT INTO test(pname,pnum) VALUES('产品2','2,4,7');
INSERT INTO test(pname,pnum) VALUES('产品3','3,4');
INSERT INTO test(pname,pnum) VALUES('产品4','1,7,8,9');
INSERT INTO test(pname,pnum) VALUES('产品5','33,4');

查找pnum字段中包含3或者9的记录
mysql> SELECT * FROM test WHERE find_in_set('3',pnum) OR find_in_set('9',pnum);
+----+-------+---------+
| id | pname | pnum |
+----+-------+---------+
| 3 | 产品3 | 3,4 |
| 4 | 产品4 | 1,7,8,9 |
+----+-------+---------+
2 rows in set (0.03 sec)

使用正则
mysql> SELECT * FROM test WHERE pnum REGEXP '(3|9)';
+----+-------+---------+
| id | pname | pnum |
+----+-------+---------+
| 3 | 产品3 | 3,4 |
| 4 | 产品4 | 1,7,8,9 |
| 5 | 产品5 | 33,4 |
+----+-------+---------+
3 rows in set (0.02 sec)
这样会产生多条记录,比如33也被查找出来了,不过MYSQL还可以使用正则,挺有意思的

find_in_set()函数返回的所在的位置,如果不存在就返回0
mysql> SELECT find_in_set('e','h,e,l,l,o');
+------------------------------+
| find_in_set('e','h,e,l,l,o') |
+------------------------------+
| 2 |
+------------------------------+
1 row in set (0.00 sec)

还可以用来排序,如下;
mysql> SELECT * FROM TEST WHERE id in(4,2,3);
+----+-------+---------+
| id | pname | pnum |
+----+-------+---------+
| 2 | 产品2 | 2,4,7 |
| 3 | 产品3 | 3,4 |
| 4 | 产品4 | 1,7,8,9 |
+----+-------+---------+
3 rows in set (0.03 sec)

如果想要按照ID为4,2,3这样排序呢?
mysql> SELECT * FROM TEST WHERE id in(4,2,3) ORDER BY find_in_set(id,'4,2,3');
+----+-------+---------+
| id | pname | pnum |
+----+-------+---------+
| 4 | 产品4 | 1,7,8,9 |
| 2 | 产品2 | 2,4,7 |
| 3 | 产品3 | 3,4 |
+----+-------+---------+
3 rows in set (0.03 sec)

文章转载自 http://blog.csdn.net/myweishanli/article/details/11963137

在Mac OS下 如何将git分支名显示在前面

先看下效果
git_branch_name

打开.bash_profile文件
如果没有先创建一个

$ touch ~/.bash_profile

打开文件并编辑

$ vim ~/.bash_profile

在最后面加入并保存并退出

# Git branch in prompt.
parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* (.*)/ (1)/'
}
export PS1="u@h W[33[32m]$(parse_git_branch)[33[00m] $ "

最后别忘了让编辑的文件生效

source ~/.bash_profile

Notice:
[33[32m] 这部分设置分支的文本的颜色,如果你喜欢另一种颜色,修改斜杠内的色值。

Mac OS X wifi 休眠后自动断网的问题

自从OS X 10.8 发布一来一直有个小问题就是长时间不使用的时候系统会自动进入休眠状态并且断开wifi网络连接.这样会造成下载的数据暂停等. 有些小不方便.
经过搜索, 可以在终端内输入如下命令暂停这个休眠. 
新版的支持一个Standby的模式的,在GUI界面是看不见的,也没有休眠的设置,所以需要使用命令。

sudo pmset -a standby 0 sleep 20 hibernatemode 3 networkoversleep 0 force

要恢复只需要在终端输入

sudo pmset -a standby 1 sleep 20 hibernatemode 3 networkoversleep 0 force

这样的设置可能会造成如果没有连接电源情况下比较费电. 大家请酌情使用吧..

转自:http://blog.sina.com.cn/s/blog_71715bf80101ebhk.html

git hooks pre-commit git挂钩防范于未然 提交前的自我检查

这几天抽空看了一下git文档,发现有个hooks的好东西,在开发过程中常常不小心会把一些不想提交的文件给提交进去,也常常在提交代码后发现 文件有语法错误,这样的提交一旦上线后很可能会导致正式环境出现严重的问题。

今天就说一下 pre-commit 这个hook,它会在你执行 git commit 操作的时候触发,如果该hook返回1,那么这次的 commit 将会被终止。

hook 位于 .git/hooks/ 目录下,可以看到很多 .sample 的文件这些都是示例文件,我们自己建一个 pre-commit 文件,里面可以写shell脚本,比如我写了一个检查php语法错误和config文件不可被提交进去的脚本

#!/bin/sh
#
# An example hook script to verify what is about to be committed.
# Called by "git commit" with no arguments.  The hook should
# exit with non-zero status after issuing an appropriate message if
# it wants to stop the commit.
#
# To enable this hook, rename this file to "pre-commit".

ROOT_DIR="$(pwd)/"
LIST=$(git diff-index --name-only --diff-filter=ACMR HEAD)
ERRORS_BUFFER=""
for file in $LIST
do
    EXTENSION=$(echo "$file" | grep "config.php$")
    if [ "$EXTENSION" != "" ]; then
        echo "注意:有config文件要提交!如果确定要提交可用 git commit --no-verify 来忽略";
        exit 1
    fi
    EXTENSION=$(echo "$file" | grep ".php$")
    if [ "$EXTENSION" != "" ]; then
        ERRORS=$(php -l $ROOT_DIR$file 2>&1 | grep "Parse error")
        if [ "$ERRORS" != "" ]; then
            if [ "$ERRORS_BUFFER" != "" ]; then
                ERRORS_BUFFER="$ERRORS_BUFFERn$ERRORS"
            else
                ERRORS_BUFFER="$ERRORS"
            fi
            echo "检测到有语法错误的php文件: $file "
        fi
    fi
done
if [ "$ERRORS_BUFFER" != "" ]; then
    echo
    echo "Found PHP parse errors: "
    echo -e $ERRORS_BUFFER
    echo
    echo "PHP parse errors found. Fix errors and commit again."
    exit 1
else
    echo "No PHP parse errors found. Committed successfully."
fi

大功告成,测试一下:

pre-commit

pre2

php cgi socket: Too many open files

Too many open files经常在使用linux的时候出现,大多数情况是您的程序没有正常关闭一些资源引起的,所以出现这种情况,请检查io读写,socket通讯等是否正常关闭 错误信息:


create_debugger_socket("127.0.0.1", 9002) socket: Too many open files

用 ulimit -a  查看了一下 只有 256


ulimit -a

open files                      (-n) 256

使用 ulimit -n 命令来提高 open files 数


ulimit -n 1024

当然这个只是临时的修改,关闭终端后就失效了 我们可以通过修改 /etc/launchd.conf 文件来使其永久生效 如果系统中不存在launchd.conf我们就创建一个,如果已存在 则在最后添加

sudo vim /etc/launchd.conf

添加以下内容 limit maxfiles 65536 65536 修改后重启电脑然后再通过 ulimit -a 查看

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
max locked memory       (kbytes, -l) unlimited
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 1
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 709
virtual memory          (kbytes, -v) unlimited

参考文章:http://artincube.com/too-many-open-files-limit-on-mac-os-x-ptgui-pro/

在VirtualBox中设置ubuntu虚拟机挂载共享宿主机的方法

有时需要在虚拟机中共享宿主机的文件,但是发现选择了宿主机的文件夹进行共享后,并没有效果,这让我们非常头疼。

接下来给大家演示一下如何在ubuntu虚拟机中加载宿主机的共享文件夹

1

2 3 4

 

注意!此时的Folder Name 必须和共享的文件夹名不一致,否则无法加载进来,比如我选的文件夹是 sites ,命名的Folder Name 是 macsites

执行完以后,进入ubuntu虚拟机,打开终端进行以下操作


sudo mkdir /mnt/shared

sudo mount -t vboxsf macsites /mnt/shared

操作完以后就可以了,快去看看吧

6

是不是挂载进来了~!

linux 解压命令

.tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
———————————————
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName

.tar.gz 和 .tgz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar.gz DirName
———————————————
.bz2
解压1:bzip2 -d FileName.bz2
解压2:bunzip2 FileName.bz2
压缩: bzip2 -z FileName

.tar.bz2
解压:tar jxvf FileName.tar.bz2
压缩:tar jcvf FileName.tar.bz2 DirName
———————————————
.bz
解压1:bzip2 -d FileName.bz
解压2:bunzip2 FileName.bz
压缩:未知

.tar.bz
解压:tar jxvf FileName.tar.bz
压缩:未知
———————————————
.Z
解压:uncompress FileName.Z
压缩:compress FileName
.tar.Z

解压:tar Zxvf FileName.tar.Z
压缩:tar Zcvf FileName.tar.Z DirName
———————————————
.zip
解压:unzip FileName.zip
压缩:zip FileName.zip DirName
———————————————
.rar
解压:rar x FileName.rar
压缩:rar a FileName.rar DirName
———————————————
.lha
解压:lha -e FileName.lha
压缩:lha -a FileName.lha FileName
———————————————
.rpm
解包:rpm2cpio FileName.rpm | cpio -div
———————————————
.deb
解包:ar p FileName.deb data.tar.gz | tar zxf –
———————————————
.tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh .lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea
解压:sEx x FileName.*
压缩:sEx a FileName.* FileName