从数据库中选择随机项

时间:2012-02-16 06:47:23

标签: php mysql sql

我有一个跟踪书籍的数据库。书籍表格如下:

-----------------------------------------------
   BookID   |    UserID      |     SecID
-----------------------------------------------
     66     |      1         |      3
-----------------------------------------------
     67     |      1         |      2
-----------------------------------------------
     68     |      1         |      5
-----------------------------------------------
     69     |      2         |      2
-----------------------------------------------

我想从一系列可能的部分中选择一个由特定用户拥有的随机书

例如 如果$userID = 1$arrayA = array(1,2,3);输出应为图书6667

我本来可以使用array_rand($arrayA, 1);然后注入该函数返回的任意随机数以使用此sql语句拉出本书

SELECT * FROM `books` WHERE userID = '1' AND typeID = '$randomSection' LIMIT 1

但是,如果array_rand函数返回1,则sq​​l语句不返回任何内容。只要用户在给定的某个部分中至少列出了一本书,我该如何编写一个更好的sql语句来保证结果?

3 个答案:

答案 0 :(得分:2)

您的查询稍有变化:

SELECT * FROM 'books' WHERE userID = '1'  order by rand() LIMIT 1

答案 1 :(得分:2)

  SELECT *
    FROM `books`
   WHERE userID = 1
     AND typeID IN (1, 2, 3)
ORDER BY RAND()
   LIMIT 1

ORDER BY RAND()如果你有很多与条件匹配的结果,则相当昂贵,但对于小结果集和最简单的方法来说,它是无关紧要的。

答案 2 :(得分:1)

试试这个:

select * from t1
where userid = '1' and secid in ('1', '2', '3')
order by rand()
limit 1

当然,1(1, 2, 3)将是那里的参数。