求助两道面试题

pakey 2012-09-14 12:46:14
第一题:计算某个表新插入记录的id值(id为主键),不用mysql本身的自增id策略而采用memcached,假设key值不会丢失,请指出方法2错在哪里。
方法1:
$lastInsertId = $memcacheObj->increment($key);
return $lastInsertId;


方法2:
$lastInsertId = $memcacheObj->get ($key);
$lastInsertId++;
$memcacheObj->set($key,$lastInsertId);
return $lastInsertId;



第二题:为这段代码找错

$nowdate=date('Y-m-d');
$olddate=date('Y-m-d',strtotime('-7 days'));
$table=date('Ym');
$reltable='readerorder_master_'.$table;
$sql1="SELECT novelid, sendmoneydate, sum( jj_point ) AS jj FROM {$reltable} WHERE STATUS =2 AND sendmoneydate BETWEEN '".$olddate."' AND '".$nowdate."' GROUP BY novelid ORDER BY jj DESC limit 1,500";
$DBM = new Net_Config_Database(Net_Config_Database::vip_moneyMaster);
$query1=$DBM->query($sql1);
$novelIDs = array();
while($relult1 = $DBM->fetch_array($query1)){
$novelIDs[]=$relult1['novelid'];
}
$stronglyIndex1 = array();
$nums=0;
foreach($novelIDs as $value){
$sql2="SELECT a.authorid,a.authorname,n.novelname,n.novelid, ebookurl as coverImg ,n.vip_flag
FROM novelinfo n,author a,novel_class_1 b
WHERE n.authorid=a.authorid and n.novelid = b.novelid and b.yc in(1,2) and xx in(2,3) and n.vip_flag=1 and n.vip_month_flag=0
AND n.novelid={$value}";
$query = mysql_query($sql2, $connect);
$result2 = mysql_fetch_array($query);
if($result2['vip_flag'] == 1 && $nums < 10){
$stronglyIndex1[] = $result2;
$nums++;
}
}
...全文
182 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
acabin 2012-09-16
[Quote=引用 4 楼 的回复:]
还有没有其他的答案呢
[/Quote]
2楼说的挺好的,我也就能说说$reltable可能实际上不存在,直接select可能报错
回复
pakey 2012-09-15
还有没有其他的答案呢
回复
wyfytangsh 2012-09-14
[Quote=引用 1 楼 的回复:]

1. 多线程会有重复ID
2. 只看出来三个错误
第一个是,表名是月份,如果当前是1号的话,那么-7days前一个月的记录就找不到了。
第二个是,xx是什么字段?
第三个是,if($result2['vip_flag'] == 1 && $nums < 10)
只要能找到记录$result2['vip_flag']就是1,所以if($result2)就够了。
另外,既……
[/Quote]
老兄挺给力的啊

天啊
我看不懂啊
怎么办 ?
回复
pakey 2012-09-14
1、increment带锁机制么?
回复
Meteorlet 2012-09-14
1. 多线程会有重复ID
2. 只看出来三个错误
第一个是,表名是月份,如果当前是1号的话,那么-7days前一个月的记录就找不到了。
第二个是,xx是什么字段?
第三个是,if($result2['vip_flag'] == 1 && $nums < 10)
只要能找到记录$result2['vip_flag']就是1,所以if($result2)就够了。
另外,既然$nums < 10才需要把结果追加,那么>=10的时候就应该break
回复
相关推荐
发帖
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
帖子事件
创建了帖子
2012-09-14 12:46
社区公告
暂无公告