Объединить два запроса mySQL

Есть две таблицы. Первая с городами, вторая с именами людей. Нужно взять 10 рандомных имён людей, и к каждому добавить рандомный город. Должен получиться массив: Максим - Москва, Наташа - Новосибирск, и т.д. По отдельности запросы такие:

SELECT username FROM table_users ORDER BY RAND() LIMIT 10
SELECT cityname FROM table_cities ORDER BY RAND() LIMIT 10

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

UPD У меня единственный вариант на php - взять массив городов, и каждую его итерацию присваивать элементу (городу) рандомное имя. Но это 10 лищних запросов в БД, да ещё и by rand.


Ответы (2 шт):

Автор решения: Akina

Ну например так:

SELECT username,
       ( SELECT cityname 
         FROM table_cities 
         ORDER BY RAND() LIMIT 1
         ) AS cityname
FROM table_users 
ORDER BY RAND() LIMIT 10

Правда, такой запрос не гарантирует 10 разных городов.

→ Ссылка
Автор решения: Vladimir Ignatenko

В вашей ситуации будет проще сделать объединение на PHP.

Т.е. получить в один массив 10 имен пользователей, а во второй 10 городов. Т.е. те два запроса, котоыре вы приводите. Выполняете их отдельно и получаете два массива по 10 элементов каждый.

А затем в PHP объединяете их. Например, так

//В массивах $users и $cities результат запросов.
$result = [];
foreach($users AS $index => $row) {
    $result[] = ['username' => $row['username'], 
                 'cityname' => $cities[$index]['cityname']
                ];
}

Т.е. подразумевается, что в исходных массивах данные уже перемешены случайно и поэтому дополнительного рандома не нужно.

→ Ссылка