使用的mysql是4.07的.似乎不支持in模式.不过应该支持left join吧.目前在做个新闻列表的页面.按id取后20条记录.然后随机排列出来.
$sql=mysql_query("Select * from (Select id from table1 order by id desc limit 20) order by rand() limit 5") or die("Error");
当然以上的代码是错误的.不过相信各位知道是什么意思.当我换成$sql=mysql_query("Select * from table1 where id in (Select id from table1 order by id desc limit 20) order by rand() limit 5") or die("Error");
还系不行.用了left join的方法.似乎也有问题.求各位支个招~

解决方案 »

  1.   

    mysql 4 不是不支持in模式,而是不支持子查询
    对于你的问题,可以分两步完成
    1、将子查询部分做成临时表
    CREATE TEMPORARY TABLE temp Select × from table1 order by id desc limit 20
    2、从临时表完成主查询
    Select * from temp order by rand() limit 5
      

  2.   

    select id from table1 t1
    where 20>(select count(*) from table1 where id>t1.id)
    order by rand()
    limit 5;
      

  3.   

    感谢三位.不过建立那个代码是在index的.如果频繁建立临时表,没有去释放的话不知道是否会有问题.还有没有更好的方法呢?
      

  4.   

    其实你直接取20条记录
    随机排列交给PHP做会比较好
      

  5.   

    分三步1、在第一个表 提取 id => $arr12、在第二个表提取相关信息 => $arr23、在 php 里再对应 $arr1 找到 $arr2 相关信息 
      

  6.   

    不好意思各位,最近太忙,都忘记揭帖了.
    我用了双次查询的方式解决了.先按id desc后取出20条记录.然后在这20条的基础上随机了.感谢各位的回答.