第一题:计算某个表新插入记录的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++;
 }
 }

解决方案 »

  1.   

    1. 多线程会有重复ID
    2. 只看出来三个错误
    第一个是,表名是月份,如果当前是1号的话,那么-7days前一个月的记录就找不到了。
    第二个是,xx是什么字段?
    第三个是,if($result2['vip_flag'] == 1 && $nums < 10)
    只要能找到记录$result2['vip_flag']就是1,所以if($result2)就够了。
    另外,既然$nums < 10才需要把结果追加,那么>=10的时候就应该break
      

  2.   

    2楼说的挺好的,我也就能说说$reltable可能实际上不存在,直接select可能报错