更新中。。。。。
=================
基本:
-----------------------------
限制数量:
TOP 或者TOP 50 PERCENT的方法,前者是数量,后者是百分比
SELECT TOP 300 * FROM talbleA;
Mysql不同,不支持TOP,不过Mysql可以用LIMIT
SELECT * FROM tableA LIMIT 300;
用途:
限制数量,减少开销吧,自己用着手动查东西也可以少查点,免得乱或者慢。
--------------------------------------
获取时间:
直接获取当前时间的sql函数——now()——不过类型是datetime
想或许linux的时间,一种方法是传入给数据库就用linux的1970到现在的描述,int型,到时候直接取出
第二种方法就是不传入,继续用now()获取时间(当然只限于用当前时间的情况),用datetime存储时间,不过读取的时候用unix_timestamp()转换一下就完了。
用途:
对于需求秒数的,前端就不用再费力转换了。
查重:
看表中是否有重复数据:比如用户表
select * from user group by user_id having count(*) > 1;
select new_id,user,count(*) from leiren.circle group by new_id having count(*)>1;
衍生出看表中是否有符合条件的数据:大于1是重复数据,大于0就是有数据咯,不过有数据就不用这个条件了,直接搜。
用途:
比如mysql-front某些版本不好用或者网络不好,某些需要唯一的数据,初始化时候插了两边,全都重了,查重比较方便确认数据表是否有问题。
--------------------------------------
嵌套:
select a,b(select b from table1)c from table2;
嵌套内部只能搜出一个结果,等于把结果当成一个数值
例子:
select sex,(select user_id from user where user_id = 15911086638)c from user where user_id = 15911086638;
----------------------------------------------------
跨表:
-------------------------------------------
难的是如何
跨表又嵌套,还查多条数据
(因为嵌套里边的条件和外边的难协调),目前没办到,只能从其他方向简化操作。
稍微麻烦的个例:
SELECT user_feeling.user_id,user_feeling.picture_url,user_feeling.update_time,friend_list.feeling_praise_type,user_feeling.praise_1,user_feeling.praise_2,user_feeling.praise_3
FROM user_feeling LEFT JOIN friend_list
ON friend_list.friend_id = user_feeling.user_id #联结,关键不是一对一关系,在friend_list中friend_id不是唯一,是每个好友用user_id向你friend_id辐射一个关系
WHERE friend_list.user_id = 15911086638 AND state = 0;
------------------------------------------------条件控制:IF ELSE
需要针对多种条件做不同操作时,还是很有用的
尤其注意多分支时用的不是ELSE IF,是ELSEIF,没空格!!!
而且END IF不是ENDIF,是有空格的~!!!!
案例:奖励ordinary数量,正常奖励iMines(10),奖励又不能超100,但是人家已有的你不能剥夺,比如500,所以最后要判断一下。知道这个写的不是最简化,没用变量做判断,奖励数额变了还得更改,但是奇葩需求太多变更太快,还是快速实现为主:
BEGIN
SELECT ordinary from lib_mines where user_id = _lluser INTO iTotalMines; #查出来当前数量
IF (iTotalMines < 100 AND iTotalMines >90) THEN
BEGIN
SET iTotalMines = 100;
END;
ELSEIF iTotalMines < 91 THEN
BEGIN
SET iTotalMines = iTotalMines + iMines;
END;
ELSE
BEGIN
SET iTotalMines = iTotalMines;
END;
END IF;
# 更新雷库
UPDATE lib_mines SET ordinary = iTotalMines WHERE user_id = _lluser;#
CALL p_add_mines_record(_lluser, 1, iMines);#加记录,可有可无,以前的功能
RETURN iTotalMines;
END;
好吧我还是改改吧:
DECLARE iMaxRewardTo int DEFAULT 100;#最大奖励到100
#。。。。。。。
#一些前提判断
SET iMines = 10;
BEGIN
SELECT ordinary from lib_mines where user_id = _lluser INTO iTotalMines; #查出来当前数量
IF (iTotalMines < iMaxRewardTo AND iTotalMines > iMaxRewardTo - iMines) THEN
BEGIN
SET iTotalMines = iMaxRewardTo;
END;
ELSEIF iTotalMines < iMaxRewardTo - iMines + 1 THEN
BEGIN
SET iTotalMines = iTotalMines + iMines;
END;
ELSEIF iTotalMines > iMaxRewardTo THEN
BEGIN
SET iTotalMines = iTotalMines;
END;
END IF;
# 更新雷库
UPDATE lib_mines SET ordinary = iTotalMines WHERE user_id = _lluser;#
CALL p_add_mines_record(_lluser, 1, iMines);#加记录,可有可无,以前的功能
RETURN iTotalMines;
END;
-----------------------------