从数据库中随机选取项目


Pick random item from database

我有一个跟踪书籍的数据库。图书表看起来是这样的:

-----------------------------------------------
   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,则sql语句不返回任何内容。只要用户在给定的部分中至少列出了一本书,我如何编写一个更好的sql语句来保证结果?

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

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

查询中只有一点更改:

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

试试这个:

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

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