我有一个跟踪书籍的数据库。书籍表格如下:
-----------------------------------------------
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语句来保证结果?
答案 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)
将是那里的参数。