Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从表中获取随机行(但仅当该行包含特定值时)_Php_Mysql - Fatal编程技术网

Php 从表中获取随机行(但仅当该行包含特定值时)

Php 从表中获取随机行(但仅当该行包含特定值时),php,mysql,Php,Mysql,假设我有一张名为animals的表格,看起来像这样: 1 red fox 2 blue elephant 3 red dog 4 yellow cat 5 green mouse 6 blue rat 实际上,我想做的是创建一个临时表(虚拟表),它只包含我指定的值的行。例如红色: 1 red fox 3 red dog 然后从这个虚拟表中随机获取一行 我不想做的是永久性地创建这些表,并不断地更新它们,从主动物表中获取信息。我想使用某种子查询、

假设我有一张名为
animals
的表格,看起来像这样:

1 red     fox
2 blue    elephant
3 red     dog
4 yellow  cat
5 green   mouse
6 blue    rat
实际上,我想做的是创建一个临时表(虚拟表),它只包含我指定的值的行。例如
红色

1 red     fox
3 red     dog
然后从这个虚拟表中随机获取一行

我不想做的是永久性地创建这些表,并不断地更新它们,从主
动物
表中获取信息。我想使用某种子查询、视图、临时表或任何您想称之为它的东西快速地完成这项工作


请记住,我是一个完整的php noob,可以使用尽可能多的语法解释。

您可以使用如下sql查询

SELECT * FROM table
where color = 'red'
ORDER BY RAND()
LIMIT 1 

您可以将限制更改为要获取的任意行数

您可以使用如下sql查询

SELECT * FROM table
where color = 'red'
ORDER BY RAND()
LIMIT 1 

您可以将限制更改为要获取的任意行数

此解决方案可行,但在大型应用程序上它是真正的性能杀手。也许更好的做法是选择所有包含
red
的ID,然后从中选择随机ID,然后根据该ID选择一行。好吧,我不是PHP专家,但可能是您可以得到1…n之间的两个随机数,其中n是您的查询将获取的行总数。然后从这些位置选择两个结果。@PeterKrejci:但这正是查询所做的。你能详细说明一下你想要什么样的实现吗?为了OP的好处:上面的SQL将实现预期的结果,但正如peter所指出的;从某种程度上说,这将是缓慢的。看看为什么。这里的要点是,当你的“红色”列表包含数十万条、数百万条或数十亿条记录时,可以进行缩放。最初,Grrrrr的定义将起作用。但是,如果您处理的是大的结果,那么Peter的回答是有价值的。这个解决方案是有效的,但它是大型应用程序上真正的性能杀手。也许更好的做法是选择所有包含
red
的ID,然后从中选择随机ID,然后根据该ID选择一行。好吧,我不是PHP专家,但可能是您可以得到1…n之间的两个随机数,其中n是您的查询将获取的行总数。然后从这些位置选择两个结果。@PeterKrejci:但这正是查询所做的。你能详细说明一下你想要什么样的实现吗?为了OP的好处:上面的SQL将实现预期的结果,但正如peter所指出的;从某种程度上说,这将是缓慢的。看看为什么。这里的要点是,当你的“红色”列表包含数十万条、数百万条或数十亿条记录时,可以进行缩放。最初,Grrrrr的定义将起作用。但是如果你处理的是大的结果,那么彼得的回答是有价值的。