一中大型网站,要求显示记录列表是这样的:1、VIP会员发布的信息比普通会员发布的信息都要优先显示(不按信息发布时间)2、VIP会员发布的信息按照兼顾原则给予显示:即如有5个VIP会员,就按发布的时间逐一给这5个会员显示所发布的信息,然后第6条显示信息时又是按这5个会员轮回显示他们的第二条信息,循环着。为了方便各位高手解答,预设简化数据表表table字段(5):
id member[发布者] content[信息内容] types[会员类型] date
一时想不出有什么好的SQL查语句或解决方案,请教各位高手了,谢谢!
id member[发布者] content[信息内容] types[会员类型] date
一时想不出有什么好的SQL查语句或解决方案,请教各位高手了,谢谢!
(
SELECT *
FROM `table`
WHERE types='vip' and member in (vip1, vip2, vip3, vip4, vip5) //这五个为特殊vip,如果有特殊vip类型,则可省略后面的条件
ORDER BY date DESC
)
UNION (
SELECT *
FROM `table`
WHERE types='vip' and member not in (vip1, vip2, vip3, vip4, vip5)//同上
ORDER BY date DESC
)
UNION(
SELECT *
FROM `table`
WHERE types='common'
ORDER BY date DESC
)
LIMIT 0, 30
vip2
vip3
vip4
vip5
vip1
vip2
vip3
...这样的轮询显示吗?
然后再update table set sID = sID + 1 where id != LAST_INSERT_ID().确保最新一条msg的sID为1。这样,用sql语句 select * from table order by types,sID就差不多可以实现了。第一个order by types是将vip与普通会员区别开。sID是实现兼顾原则。
这个思路很好!就是有点恨晚,已存在的成千上万条记录难以给sID赋值。(要赋值只能再编个程序给不用的用户赋不同的sID值)。不知还有没有更佳的方法?
采取hzcenter 的思路,拟采取以下方案。增加aID字段查询显示记录列表语句:select * from table order by types,sID;但在用户发布(修改)信息后,执行下列代码:
SQL1:select member from table group by member order by date desc
CODE:
$i=0;
while($row1){//$row1为SQL1的搜索集合
$i++;
SQL2:update table set sID=$i where member='{$row1['member']};
}
这样应该可行吧,不知各位方家有没有什么建议?
漏了一个条件!修改资料就不用修改sID了!大批量也应该有好方法能解决的!不知道你具体情况