php mysql 权重_PHP+MYSQL索引问题,两种方法的效率及利弊对比

现在mysql数据库大概有8000条消息记录,有如下几个索引:pic_news,top_news,index_news,imp_news,值均为1或0,代表“是否为图片新闻、头条新闻、首页新闻,重要新闻”。这时候假若我...

现在mysql数据库大概有8000条消息记录,有如下几个索引:pic_news,top_news,index_news,imp_news,值均为1或0,代表“是否为图片新闻、头条新闻、首页新闻,重要新闻”。

这时候假若我调用三条是图片新闻的新闻时,直接可以用sql语句。

select * from news where pic_news=1 order by news_id desc limit 0,3;

语句倒是挺简单的,不过我觉得这个news表的结构索引用得太多了。所以想把这是个索引统一到一个键:features,值为1,2,3,4及他们之间的组合值(用“,”号分开),“1,2,3,4”分别代表“是图片新闻、头条新闻、首页新闻,重要新闻”。组合值就代表该新闻有多种属性,如"1,2"代表"是图片新闻、头条新闻、"。

问题出现了。假若我查的新闻是只有一个属性,那还是可以用类似的sql语句:select * from news where features=1 order by news_id desc limit 0,3;搞定。

但实际往往一则新闻有多种属性,如可能是图片新闻和重要新闻。所以如果我要查三条是图片新闻的新闻时,就不能用feature="1"这个条件了。

只好考虑循环:程序思路如下

$i=0;$j=0;

$sql="select * from news order by news_id desc limit".$i.",1";

$query=mysql_query($sql);

while($re=mysql_fetch_array($query))

{

$features=explode(",",$re[features]);

if(in_array(1,$features))//判断1是否在这个数组里面

{

echo "" ; //如果是则输出该新闻的相关信息

$j++;

}

$i++;

$sql="select * from news order by news_id desc limit".$i.",1";

$query=mysql_query($sql);

if($j==3) break;//当已经找到最近的三条图片新闻则退出循环

}

第二种方法实现起来是有点麻烦,但看到数据库表news里面这么多键又不爽。麻烦各位大仙们从效率的角度分析那种方法更佳。或者分析下利弊,那种更适合用户的速度。第二种方法可以有何改进不。

另外:都是在首页按这几种属性调用新闻,一般提取10则信息。

展开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值