Php 从数据库中随机选取项目
我有一个记录书籍的数据库。books表如下所示:Php 从数据库中随机选取项目,php,mysql,sql,Php,Mysql,Sql,我有一个记录书籍的数据库。books表如下所示: ----------------------------------------------- BookID | UserID | SecID ----------------------------------------------- 66 | 1 | 3 -----------------------------------------------
-----------------------------------------------
BookID | UserID | SecID
-----------------------------------------------
66 | 1 | 3
-----------------------------------------------
67 | 1 | 2
-----------------------------------------------
68 | 1 | 5
-----------------------------------------------
69 | 2 | 2
-----------------------------------------------
我想从一系列可能的章节中选择一本由特定用户拥有的随机书籍
比如说
如果$userID=1和$arrayA=array1,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' order by rand() LIMIT 1
只需对您的查询进行一点更改:
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将是其中的参数。尝试以下操作:
select * from t1
where userid = '1' and secid in ('1', '2', '3')
order by rand()
limit 1
当然,1和1、2、3将是参数。事实上,这肯定是正确的答案。你知道实现同样目标的更便宜的方法吗。理论上?这在很大程度上取决于您的特定数据集。请搜索这个网站,你会找到很多答案。事实上,这肯定是正确的答案。你知道实现同样目标的更便宜的方法吗。理论上?这在很大程度上取决于您的特定数据集。请搜索此网站,你会找到许多答案。不幸的是,只有一个答案可以接受。不过我把你的答案排得很高!幸运的是,只有一个答案是可以接受的。不过我把你的答案排得很高!谢谢!这是一本关于艺术的书,它是一本关于艺术的书,它是一本关于艺术的书,一本关于艺术的书,一本关于艺术的书,一本关于艺术的书,一本关于艺术的书,一本关于艺术的书,一本关于艺术的书,一本关于艺术的书,一本关于艺术的书,一本关于艺术的书,一本关于艺术的书。这本书的作者是:BookID,UserID,SecID,66,1,3,67,1,2,哇!这是一本关于艺术的书,它是一本关于艺术的书,它是一本关于艺术的书,一本关于艺术的书,一本关于艺术的书,一本关于艺术的书,一本关于艺术的书,一本关于艺术的书,一本关于艺术的书,一本关于艺术的书,一本关于艺术的书,一本关于艺术的书,一本关于艺术的书。Büchertish sieht folgendermaßen aus:--------------------------------------BookID | UserID | SecID--------------------66 | 1 | 3--------------------67 | 1 | 2-------