首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机选择表mysql

随机选择表mysql
EN

Stack Overflow用户
提问于 2020-12-13 13:46:39
回答 3查看 64关注 0票数 1

我有3个相同结构的表,分别称为低、中、高。我想从这些表中随机选择一个表,然后查询该表。

可视化示例:

SELECT * FROM RAND(low,med,high)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-13 15:17:42

您使用的是PHP标记,因此在该语言中可以是这样的:

代码语言:javascript
复制
$tables = ['low', 'med', 'high'];
$randomTable = $tables[mt_rand(0, 2)];
$query = 'SELECT * FROM '.$randomTable;

$mysqli = new mysqli("host","my_user","my_password","my_db");
$result = $mysqli -> query( $query);

在MySQL中,除了其他解决方案之外,还可以是这样的:

随机选择表:

代码语言:javascript
复制
set @randomNumber = FLOOR(RAND()*3+1);

set @table = IF(@randomNumber = 1, 'low', IF(@randomNumber = 2, 'med', 'high'));

代码语言:javascript
复制
set @table = CASE
    WHEN @randomNumber = 1 THEN 'low'
    WHEN @randomNumber = 2 THEN 'med'
    ELSE 'high'
END;

构建并运行查询:

代码语言:javascript
复制
SET @s = CONCAT('select * from ', @table); 
PREPARE stmt1 FROM @s; 
EXECUTE stmt1; 
DEALLOCATE PREPARE stmt1;

How to select from MySQL where Table name is Variable

MySQL get a random value between two values

票数 1
EN

Stack Overflow用户

发布于 2020-12-13 13:58:37

您可以使用联合方法,将计算值1、2或3分配给这三个表中的每个表,然后从一个表中随机选择记录:

代码语言:javascript
复制
SELECT *
FROM
(
    SELECT *, 1 AS label FROM low UNION ALL
    SELECT *, 2 FROM med UNION ALL
    SELECT *, 3 FROM high
) t
WHERE label = FLOOR(RAND()*3+1);  -- random number between 1 and 3 inclusive
票数 1
EN

Stack Overflow用户

发布于 2020-12-13 14:49:45

代码语言:javascript
复制
select * from high
union all
select * from med
union all
select * from low
order by rand()
limit 1

SQLFiddle demo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65272732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档