dongyuans61046 2014-07-13 10:21
浏览 14
已采纳

php mysql 2选择1选择

id | cid | name 
 1 | 1   | product 1 
 2 | 1   | product 2 
 3 | 1   | product 3 
 4 | 1   | product 4 
 5 | 1   | product 5 
 6 | 1   | product 6 
 7 | 2   | product 7 
 8 | 2   | product 8
 9 | 2   | product 9 
10 | 2   | product 10 
11 | 2   | product 11 
12 | 2   | product 12 
13 | 3   | product 13 
14 | 3   | product 14
15 | 3   | product 15
16 | 3   | product 16 

PHP:

$query  = "SELECT cid FROM product GROUP BY cid  ORDER by cid DESC";
$result = mysql_query($query) or die('Error : ' . mysql_error()); 

echo 'id |cid | name  <br>';

while($row = mysql_fetch_array($result, MYSQL_NUM))
{
    list($cid) = $row;

    $query2  = "SELECT id, cid, name FROM product WHERE cid  = $cid ORDER by id DESC LIMIT 3";
    $result2 = mysql_query($query2) or die('Error : ' . mysql_error());

    while($row2 = mysql_fetch_array($result2, MYSQL_NUM)){
        list($id2, $cid2, $name2) = $row2;
        echo ''.$id2.' | '.$cid2.' | '.$name2.'  <br>';
    }   

}

return ==>>

id | cid | name 
16 | 3   | product 16 
15 | 3   | product 15 
14 | 3   | product 14 
12 | 2   | product 12 
11 | 2   | product 11 
10 | 2   | product 10 
 6 | 1   | product 6 
 5 | 1   | product 5 
 4 | 1   | product 4 

Now, i wan't 2 select to 1 select.

example:

    $query  = "SELECT cid FROM product WHERE (SELECT id, cid, name FROM product WHERE cid  = $cid ORDER by id DESC LIMIT 3) GROUP BY cid  ORDER by cid DESC";
    $result = mysql_query($query) or die('Error : ' . mysql_error());

    while($row = mysql_fetch_array($result, MYSQL_NUM)){
        list($id, $cid, $name) = $row;
        echo ''.$id.' | '.$cid.' | '.$name.'  <br>';
    }

return ==>>

id | cid | name 

16 | 3   | product 16 
15 | 3   | product 15 
14 | 3   | product 14
12 | 2   | product 12 
11 | 2   | product 11 
10 | 2   | product 10 
 6 | 1   | product 6 
 5 | 1   | product 5 
 4 | 1   | product 4 

help me! thanks for support

  • 写回答

2条回答 默认 最新

  • dpt1712 2014-07-13 11:16
    关注

    Easiest way to achieve it would be as

    SELECT *
    FROM   product p
    WHERE (
      SELECT  COUNT(*) 
      FROM    product  p1
      WHERE p1.cid = p.cid AND 
      p.id <= p1.id
    ) <= 3
    order by p.id desc
    

    DEMO

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?