SELECT * FROM `phome_ecms_news` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `phome_ecms_news`)) AS id) AS t2 WHERE t1.id >= t2.id ORDER BY t1.id ASC LIMIT 1;
我想在这句的基础上加一个where对t1.classid的判断,于是就试着改改
    SELECT * FROM `phome_ecms_news` AS t1 JOIN ( SELECT ROUND( RAND( ) * ( SELECT MAX( id ) FROM `phome_ecms_news` ) ) AS id ) AS t2 WHERE t1.id >= t2.id AND t1.classid=140 ORDER BY t1.id ASC LIMIT 1加了AND t1.classid=140后返回的结果就是时有时无。请问如何完善这句。能够每次返回都有结果考虑到效率问题,所以没有采用 
    select * from phome_ecms_news where classid = 140 order by rand() desc limit 10我的表结构是: http://www.phome.net/doc/dbdoc/page/phome_ecms_news.html 《《 这里有详细的结构图解

解决方案 »

  1.   

    SELECT * FROM `phome_ecms_news` AS t1 JOIN ( SELECT ROUND( RAND( ) * ( SELECT MAX( id ) FROM `phome_ecms_news` where classid=140 ) ) AS id ) AS t2 WHERE t1.id >= t2.id   ORDER BY t1.id ASC LIMIT 1
      

  2.   

    select * 
    from phome_ecms_news
    Where classid=140
    And id<=(SELECT MAX( id )*RAND( ) FROM `phome_ecms_news` where classid=140)
    Limit 1;