我有一个跟踪书籍的数据库。图书表看起来是这样的:
-----------------------------------------------
BookID | UserID | SecID
-----------------------------------------------
66 | 1 | 3
-----------------------------------------------
67 | 1 | 2
-----------------------------------------------
68 | 1 | 5
-----------------------------------------------
69 | 2 | 2
-----------------------------------------------
我想从的一系列可能部分中选择一本由特定用户拥有的随机书籍
例如如果$userID = 1
和$arrayA = array(1,2,3);
,则输出应该是书本66
或67
我本可以使用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)
将是那里的参数。