Выбрать таблицу случайным образом mysql

У меня есть 3 таблицы с одинаковой структурой, называемые low, med, high. Я хотел бы случайным образом выбрать одну таблицу из этих таблиц, а затем запросить эту таблицу.

наглядный пример:

SELECT * FROM RAND(low,med,high)

I have 3 identically structured tables called low, med, high. похоже, вам лучше иметь таблицу с дополнительным столбцом для вашего низкого, среднего, высокого вместо этого
Marcin Orlowski 13.12.2020 07:16
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
67
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать метод объединения, который присваивает вычисленное значение 1, 2 или 3 каждой из трех таблиц, а затем случайным образом выбирает записи только из одной таблицы:

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
select * from high
union all
select * from med
union all
select * from low
order by rand()
limit 1

Демонстрация SQLFiddle

Ответ принят как подходящий

Вы использовали тег PHP, поэтому на этом языке это может быть так:

$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, помимо других решений, это может быть так:

Выберите стол случайным образом:

set @randomNumber = FLOOR(RAND()*3+1);

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

или

set @table = CASE
    WHEN @randomNumber = 1 THEN 'low'
    WHEN @randomNumber = 2 THEN 'med'
    ELSE 'high'
END;

Создайте и запустите запрос:

SET @s = CONCAT('select * from ', @table); 
PREPARE stmt1 FROM @s; 
EXECUTE stmt1; 
DEALLOCATE PREPARE stmt1;

Как выбрать из MySQL, где имя таблицы является переменной

MySQL получает случайное значение между двумя значениями

Я выбрал этот ответ, потому что скрипт работает быстрее. Ответ Тима Бигелейзена также сработал. Но я пытаюсь добавить дополнительные запросы, используя UNION, и я должен что-то упустить. Вот код: $tables = ['низкий', 'средний', 'высокий']; $randomTable = $tables[mt_rand(0, 2)]; $query2 = '(SELECT * FROM low ORDER BY RAND() LIMIT 0,3) UNION (SELECT * FROM med ORDER BY RAND() LIMIT 0,1) UNION (SELECT * FROM '.$randomTable.' ORDER BY RAND( ) ПРЕДЕЛ 0,1) ';

Garrison 13.12.2020 20:35

Спасибо. Пожалуйста, можете ли вы объяснить, что вы ожидаете от этого запроса? И что в этом плохого? Это выдает ошибку или нежелательный результат?

eniel.rod 14.12.2020 07:59

Приведенный выше код работает, но я добавил несколько предложений WHERE, которые вызвали синтаксическую ошибку. Я нашел проблему. Спасибо

Garrison 15.12.2020 23:56

Другие вопросы по теме