本文 8976 pv

5

今天上午到中关村在线面试做的题

© kekehu / 一些琐事 / 2008.06.06 / 13:02 / 8976PV

       中关村在线面试我印象最深的是一句“你做了这么多年的PHP,真有点不可思议”,题确实做的很不怎么样,看来自己还有很不足。可能跟我写程序时喜欢封装与复制有关系,比如数据库查询语句我就不爱自己打出来都爱去以前写的复制一个,封装了谁还会想去写,今天有面试做的题就要求关联多个表时的mysql查询的写法,一下子写不出来了,以后看来要注意这一点拉unhappy
     还有一点我想说一下max()函数绝对可以取数组的最大值的!!!!!,还有一些html标签尽然我不知,如果不做这些题的话我可能一辈子都不会知道有可能,哎
     总之很多题做的很差,很多没有写好。最后一道程序题我放出来做个记录:

     题目是:有组数字,比如5,23,63,53,23,11,6,要求重新排序,排序规则为:第一个为该组数字最大,第二个为剩下数字中最小,第三个为剩下数字中最大,第四个为剩下数字中最小,依次类推。



<?php
function neworder($array){
arsort($array);//从大到小的顺序,但数组下标没有变
$j=count($array);//统计总数
for($i=$j;$i>round($j/2);$i--){
    $newarray[]=$array[$i-1];
    $newarray[]=$array[$j-$i];
  }
//如果取余数不等于0说明给的数组是其数,取数组的个数的整数,把基数取出。
if ($j%2<>0) $newarray[]=$array[floor($j/2)];
print_r($newarray);
$array=$newarray;
}
$array1=array(1,2,3,4,5,6,7,8,9,10,11);
neworder($array1);
?>


多表查询的例子
"SELECT t1.*, t2.comname, t2.alias FROM `replies` t1 INNER JOIN `com` t2 ON t2.comid=t1.comid WHERE (t1.reproperty='0' OR t1.reproperty='4') AND t2.comname<>'' ORDER BY t1.reptime DESC LIMIT 0, {$mbcon['replynum']}"


还有一道题目也想起来了关于多表查询的题目也加上
点击在新窗口中浏览此图片
第一个问题是:查询出所有产品下的产品名称,产品分类。
SELECT t1.catname, t2.goodsname FROM `cat` t1 INNER JOIN `goods` t2 ON t2.catid=t1.id WHERE t1.catname<>''  AND t2.goodsname<>''


第二个问题是:查询出前10名的产品点击量的产品名称,点击量。
SELECT sum( t1.number ) AS num, t2.goodsname
FROM `views` t1
INNER JOIN `goods` t2 ON t2.id = t1.goodsid
WHERE t1.number <> ''
AND t2.goodsname <> ''
GROUP BY t1.goodsid
ORDER BY num DESC
LIMIT 0 , 10


如果你有好的想法请给我留言,请不要在那故弄玄虚,JJYY。

本文有 5 篇评论

  1. @ tarfly Email 说 :
    2010.06.01 18:13
    avatar

    <?php
          $arr = array(5,23,63,53,23,11,6);
          arsort($arr);
          $t = 1;
          $count = count($arr);
          for($i=0;$i<$count;$i++) {
        if($t == 1) {
            $t = 2;
            echo array_shift($arr);
            continue;
        }
        if($t == 2) {
            $t = 1;
            echo array_pop($arr);
            continue;
        }
          }
      ?>


    本人第一道题的做法

  2. @ 路人甲 说 :
    2009.09.25 09:03
    avatar

    楼上的还是没正确回答问题。。。

  3. @ XXXXY 说 :
    2009.09.25 09:00
    avatar

    不是我的方法牛而是你的数据库架构有问题,viewip跟number不可能是共存在一张表里的,你的思路错了。既然是对方的面试题,那我就不方便把答案公布出来,正确的架构应只有点击id,点击ip,对应产品id,或许会单独有一张冗余表,里边存放产品id和该产品总的点击量的对应关系,但绝不会是这种架构,所以,要么是你记错了,要么就是题目本身有问题

    kekehu 回复于 2009.09.25 10:04
    SELECT sum( t1.number ) AS num, t2.goodsname
    FROM `views` t1
    INNER JOIN `goods` t2 ON t2.id = t1.goodsid
    WHERE t1.number <> ''
    AND t2.goodsname <> ''
    GROUP BY t1.goodsid
    ORDER BY num DESC
    LIMIT 0 , 10
  4. @ XXXXY 说 :
    2009.09.24 17:35
    avatar

    既然第三个表里有viewip,说明两张表是一对多的关系,而不是单纯1对1二表连查这么简单,两点提示:count,group

    kekehu 回复于 2009.09.24 17:44
    我就问你我查询那错了?你的方法很牛的话请发出来!
  5. @ XXXXY 说 :
    2009.09.24 15:55
    avatar

    查询出前10名的产品点击量的产品名称,点击量。你还是做错了....

    kekehu 回复于 2009.09.24 17:12
    我重新建了两个表,把上面的查询代码放进去查询结果是对的,不知
    你说的做错了,是那错了?

1/1 第一页 1 最后页

发表你的见解

打开HTML 打开UBB 打开表情 隐藏 记住我
emotemotemotemotemotemotemotemotemotemotemotemotemotemotemotemotemotemotemotemot
emotemotemotemotemot