sqlSELECT * 
FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`))+(SELECT MIN(id) FROM `table`)) AS id) AS t2 
WHERE t1.id >= t2.id 
ORDER BY t1.id LIMIT 5;
我要用left join 代替JOIN怎么改
谢谢

解决方案 »

  1.   

    SELECT *  
    FROM `table` AS t1 LEFT JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`))+(SELECT MIN(id) FROM `table`)) AS id) AS t2  
    WHERE t1.id >= t2.id  
    ORDER BY t1.id LIMIT 5;
      

  2.   

    提示有错1064 -you have anerror in your sql syntax;check the manual that correspinds to your mysql server version for the right syntax touse near 'WHERE t1.id>=t2.id ORDER BY t1.id  LIMIT 5' at line 3
      

  3.   

    SELECT *   
    FROM `table` AS t1 LEFT JOIN (SELECT ROUND(RAND() * ((SELECT MAX(id) FROM `table`)-(SELECT MIN(id) FROM `table`))+(SELECT MIN(id) FROM `table`)) AS id) AS t2   
    on t1.id >= t2.id   
    ORDER BY t1.id LIMIT 5;
      

  4.   

    是没报错了
    可一直取前id5条 ,效果没了。
    1
    2
    3
    4
    5
    条上面的sql是随机取记录
      

  5.   

    直接说明你想实现的功能,这样别人不需要花时间去分析你的SQL语句到底想实现些什么。提高回贴的效率。 (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  6.   

    随机取记录记录比较多select  *  from  表名 order by rand() limit 20
    效率太低谢谢能实现随机取就行!谢谢
      

  7.   

    哦,了解了。一共多少记录? 10,000 ?
     随机取多少? 20?ID 是不是主键?是什么类型?auto_increment ?
    ID是否连续?怎么好象变成是我在提问?问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧
      

  8.   

    大概有100万条记录ID 是主键 auto_increment 
    id  title
    1    a
    2    b
    3    c如果能在id 1到100万之间取一个id值
    用id>随机值加 limit 20也可以
    就是不知道有没有随机一个数!谢谢了
      

  9.   

    一共多少记录? 大概有100万条记录 随机取多少?  继续猜测中。ID 是不是主键?是什么类型?   , ID 是主键 auto_increment  ID是否连续?  ?? 继续猜测中。
      

  10.   

    大概有100万条以上记录 采集来的
    id int类型
    连续 主键 auto_increment   
    随机取10条
      

  11.   

    如果这是样,高效的做法是在程序中先生成 10 不同的随机整数,然后使用 select * from xxx where id in (1,2,356,734);
      

  12.   


    頂,版主大人的這個方法好用order by rand() 效率真的很差
    以前看過別人寫的優化代碼, 但很長, 沒能記下來...殘念中...
      

  13.   

    多谢各位了
    ----------------------
    http://www.phpzy.com