Объединить два запроса 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 шт):
Ну например так:
SELECT username,
( SELECT cityname
FROM table_cities
ORDER BY RAND() LIMIT 1
) AS cityname
FROM table_users
ORDER BY RAND() LIMIT 10
Правда, такой запрос не гарантирует 10 разных городов.
В вашей ситуации будет проще сделать объединение на PHP.
Т.е. получить в один массив 10 имен пользователей, а во второй 10 городов. Т.е. те два запроса, котоыре вы приводите. Выполняете их отдельно и получаете два массива по 10 элементов каждый.
А затем в PHP объединяете их. Например, так
//В массивах $users и $cities результат запросов.
$result = [];
foreach($users AS $index => $row) {
$result[] = ['username' => $row['username'],
'cityname' => $cities[$index]['cityname']
];
}
Т.е. подразумевается, что в исходных массивах данные уже перемешены случайно и поэтому дополнительного рандома не нужно.