你的数据库设计不合理,当你有新的game的时候又新建一张表,这样程序会变得非常复杂,正确的方法应该是只建立一个game表,字段有ID,GID,UID,money,其中GID为游戏的编码(1、2、3、……),如果是这样表结构,SQL你自己已经会写了。
创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、成都网站制作、龙华网络推广、微信小程序开发、龙华网络营销、龙华企业策划、龙华品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供龙华建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com
对于你现在这样麻烦的数据库结构,可以利用视图来实现,建立一个视图:
CREATE VIEW game AS
select '1' GID,UID,money from game1 UNION
select '2' GID,UID,money from game2 UNION
select '3' GID,UID,money from game3
这样,你需要统计某用户UID=uid的money总和,可以使用下面的SQL:
SELECT SUM(money) FROM game WHERE UID='uid'
你需要统计某用户sname的money总和,可以使用下面的SQL:
SELECT SUM(money) FROM game WHERE UID IN (select UID from user WHERE sname='sname')
有了这个VIEW排名的SQL应该你知道怎么做了。
SELECT * FROM table_name AS a ORDER BY a.`产业`,a.`市场份额` DESC;
表数据:
海信 冰箱 0.20 1
海信 冷柜 0.20 2
海尔 冰箱 0.19 3
海尔 冷柜 0.19 4
美的 冰箱 0.18 5
美的 冷柜 0.18 6
查询结果:
海信 冰箱 0.20 1
海尔 冰箱 0.19 3
美的 冰箱 0.18 5
海信 冷柜 0.20 2
海尔 冷柜 0.19 4
美的 冷柜 0.18 6
望采纳。
SELECT * FROM table_name ORDER BY `score` DESC
就是从表中按score从高到低排序后取出的结果
这个如果想要性能的话,就用下面的sql语句实现:
select orderNo from (select (@rowNum:=@rowNum+1) orderNo , userid ,pid from TABLE,(Select (@rowNum :=0) ) b )t where t.userid=2694
然后php获得这条结果数组,取第一个元素即是排序
如果对这个sql语句有疑问,不明白,可以使用一个比较耗费性能的方法:
select userid from record
执行这条语句,获得一个数组$res
遍历前设置一个记录排序的标识 $seq=1;
for(...){
$userid=$res['userid'];//把第seq 个位置的学号拿出来,跟想要的学号比
if($userid==2694){
break;
}
$seq++;
}
//如果 这个排序标识比结果集数组大小还大,说明没这个userid的记录。
$seq就是排序
我没有测试 你可以自己试一下
应该把表B的score放到试卷表A ,
不然只能输出
张三试卷1:第1名
李四试卷1:第2名
王五试卷1:第3名
陈六试卷1:第4名
这样子
?php
mysql_connect('localhost','root','123');
mysql_select_db('lx');
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET NAMES utf8");
$arr = mysql_query("select username,s from biaob where p_id = '1' order by score desc ");
$n = 1;
while($a = mysql_fetch_array($arr)){
echo 'br'.$a['username'].'试卷1:第'.$n.'名';
$n++;
}
?
select id,integral,addtime from cos_member_vip order by integral desc,addtime asc--如果需要生成以积分为最高优先,其次以时间为从高到低为条件生成个排名字段,可用--ROW_NUMBER() OVER ()函数