mysql union 不同字段_mysql中union和union all的区别和注意点

mysql中union和union all的区别和注意点

昨天有个功能要实现排行效果,而且是随机按照某些字段的总值,但是第一个又要不一样,因为第一个人给了钱,所以要排第一。

打个比方吧,表(userinfo)中有这几个字段:username,isvalid,givedmoney,sumip,dayip,monthip,visitcount,regdate

现在要实现显示排行前10位用户,

出现在排行第一位的要是givedmoney为1的用户(表示给了钱), 而且isvalid为1(表示通过认证)

其它的9个用户呢,要在字段(sumip,dayip,monthip,visitcount)中随机选择一个作为排序的依据

这样的sql语句改怎么写呢?

下面是我的答案:

$arr_orderby=array("sumip","dayip","monthip","visitcount");

$orderby_filed=$arr_orderby(array_rand($arr_orderby) ); //得到随机字段

$sql="(select username,".$orderby_filed." from userinfo where isvalid=1 and givedmoney=1 limit 1) union (select username,".$orderby_filed." from userinfo where isvalid=1 and givedmoney!=1 limit 9) order by rand(),".$orderby_filed." desc";

?>

这里需要注意的几点是,

1:union前后的select字段一定要一样,而且顺序要一样,如果你不是select * 的话

2:第二个select中,试试limit 9和limit 10有什么不一样的效果

union和union all的区别就是后面能踢出重复的结果,如果确定表中没有重复的字段,建议使用union all

一 UNION语法

代码 复制代码

SELECT ...

UNION [ALL | DISTINCT]

SELECT ...

[UNION [ALL | DISTINCT]

SELECT ...]

SELECT ...

UNION [ALL | DISTINCT]

SELECT ...

[UNION [ALL | DISTINCT]

SELECT ...]

UNION用于把来自许多

相关文档:

给mysql开一个可以远程访问的用户命令如下:

GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

"*.*" 表示数据库中所有的表,也可以换成指定的表如test.*

"myuser" 表示的是访问的用户名;

"%" 表示所有的主机即任何的主机都可以通过这个用户名访问我的数据库,也可以该成特定� ......

在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在; 2. 如果不存在,则插入;3.如果存在,则更新。

在 SQL Server 中可以这样处理:

if not exists (select 1 from t where id = 1) insert into t(id, update_time) values(1, getdate()) else update t set update_time = getdate() where id = ......

1. 给root加密码:/usr/bin/mysqladmin -u root password 123456

2. 导出:mysqldump -u root -p dbname > file.sql

3. 导入:mysql -u root -p dbname < backup-file.sql

4. 授权:grant all on *.* to root@"%" identified by "密码";

5. 收回权限:revoke all privileges on *.* from root@"%";

6. 登录:mys ......

mysql的  find_in_set函数使用方法

很多时候我们在设计数据库时有这种情况,比如:

有个文章表里面有个type字段,他存储的是文章类型,有 1头条,2推荐,3热点,4图文 .....11,12,13等等

现在有篇文章他既是 头条,又是热点,还是图文,

type中以 1,3,4的格式存储.

那们我们如何用sql查找所有type中有4图文标准的文章呢 ......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值