Как узнать, какая случайная строка из случайной таблицы была выбрана

Я пытаюсь создать веб-сайт, на котором пользователи могут голосовать за разные предметы из игры, например, за список уровней. Я хочу, чтобы элемент, за который голосует пользователь, был из случайной таблицы и случайной строки в этой таблице.

Прямо сейчас у меня есть следующий код, настроенный для поиска случайного элемента:

$ran = mt_rand(1, 10);
switch ($ran) {
    case "1":$sql = "SELECT item, rating FROM ditems ORDER BY RAND() LIMIT 1";  
         $result = $conn->query($sql);  
         while($row = $result->fetch_assoc()) {
            echo $row["gun"];
         };
         break;
    case "2":$sql = "SELECT item, rating FROM citems ORDER BY RAND() LIMIT 1";  
         $result = $conn->query($sql);  
         while($row = $result->fetch_assoc()) {
            echo $row["item"];
         }; 
etc

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу получить доступ к тому, что выбранный элемент находится за пределами оператора switch{}, потому что массив $row объявлен локально, но я должен иметь возможность сделать это, чтобы я мог установить кнопку для голосования. предмет.

РЕДАКТИРОВАТЬ: я решил бросить все элементы в одну таблицу и выбрать элемент, используя ORDER BY RAND LIMIT 1


person user7043378    schedule 30.10.2016    source источник
comment
Есть ли у ваших предметов идентификаторы, которые вы могли бы использовать для сопряжения предметов? Можете ли вы показать немного больше вашего кода? Сейчас я не вижу достаточно информации, чтобы помочь вам.   -  person Jakub Judas    schedule 30.10.2016
comment
Зачем иметь более одной таблицы?   -  person Strawberry    schedule 30.10.2016
comment
Почему вы используете while, когда ваши запросы возвращают только одну запись? а затем у вас есть $ran, который указывает, из какой таблицы вы извлекли запись, почему вы не можете просто использовать ее для настройки кнопки? а также то же самое, что и @Strawberry, почему у вас больше одной таблицы?! структура данных этих таблиц отличается друг от друга?   -  person EhsanT    schedule 31.10.2016


Ответы (1)


Вы можете SELECT другой столбец с текстовой константой, чтобы указать, какой объект выбран:

$ran = mt_rand(1, 10);
switch ($ran) {
    case "1":$sql = "SELECT 'ditem' as entity, item, rating FROM ditems ORDER BY RAND() LIMIT 1";  
         $result = $conn->query($sql);  
         while($row = $result->fetch_assoc()) {
            echo $row["gun"];
         };
         break;
    case "2":$sql = "SELECT 'citem' as entity, item, rating FROM citems ORDER BY RAND() LIMIT 1";  
         $result = $conn->query($sql);  
         while($row = $result->fetch_assoc()) {
            echo $row["item"];
         }; 
etc
person Y.B.    schedule 31.10.2016