Каков самый быстрый и эффективный способ объединить два запроса MYSQL в один результат JSON?MySql

Форум по Mysql
Ответить
Anonymous
 Каков самый быстрый и эффективный способ объединить два запроса MYSQL в один результат JSON?

Сообщение Anonymous »

Я знаю, как использовать базовые запросы SQL, но мне нужно знать, как лучше всего объединить два запроса.
Например, я могу вывести пользователей на определенном расстоянии, и это автоматически добавит поле «расстояние». В идеале я хотел бы выполнить дополнительный запрос к другой таблице и добавить еще одно поле к выводу. Я пытаюсь объяснить это как можно лучше, поэтому, пожалуйста, потерпите, если это покажется странным.
Я изучал UNION и JOIN, но не могу полностью понять концепцию. .
Поэтому я могу выполнить запрос, чтобы получить пользователей на определенном расстоянии, как я уже сказал, из таблицы с именем «пользователи». Для простоты я уже добавил LAT и LNG для исходных координат. :-

Код: Выделить всё

$logged_user = $_GET["logged_user"];

$sql = "SELECT
*,
(
3959 *
acos(cos(radians(52.41357)) *
cos(radians(lat)) *
cos(radians(lng) -
radians(-1.51314816)) +
sin(radians(52.41357)) *
sin(radians(lat )))
) AS distance
FROM users
HAVING distance < 10
ORDER BY distance LIMIT 0,99";
$result = mysqli_query($conn, $sql) or die("Error in Selecting " . mysqli_error($conn));

$userOnlineStatus = array();
while($row = mysqli_fetch_assoc($result)){
$userOnlineStatus[] = $row;
}

echo json_encode($userOnlineStatus);
Это выведет что-то вроде: -

Код: Выделить всё

[{"id":"10102","userID":"933ce029-e0b3-4e18-ad52-9e6c2019189b","name":"test","username":"test","verified":"YES","lat":"52.4194975","lng":"-1.5101260","status":"offline","distance":"0.4289222996651918"}],
Это автоматически добавит таблицу «расстояние» к выходным данным. Как мне затем проверить, понравился ли «logged_user» другому пользователю из первого результата из другой таблицы.
Вторая таблица под названием «isLiked» просто имеет два поля: «from_user» и «to_user», «from_user» будет «logged_user. В нынешнем виде я выполняю еще один отдельный запрос: -

Код: Выделить всё

$logged_user = $_GET["logged_user"];
$to_user = $_GET["to_user"];

$sql="SELECT * FROM likes  WHERE to_user = '$to_user' AND logged_user = '$logged_user'";
$result = mysqli_query($conn, $sql) or die("Error in Selecting " . mysqli_error($conn));

if ($result->num_rows > 0) {
echo "true";
} else {
echo "false";
}
Как видите, это далеко от идеала, и приходится выполнять запрос для каждого пользователя индивидуально. «to_user» — это идентификатор пользователя из первых результатов.
Поэтому я хотел бы проверить, есть ли в «logged_user» запись каждого из «to_user». из первого результата и добавьте новое поле с именем isLiked со значением true или false.
Идеальный результат: -

Код: Выделить всё

[{"id":"10102","userID":"933ce029-e0b3-4e18-ad52-9e6c2019189b","name":"b","username":"933","verified":"YES","lat":"52.4194975","lng":"-1.5101260","status":"offline","distance":"0.4289222996651918","isLiked":"true"}],
Я знаю, и мне очень жаль, если я объяснил это так, что это трудно понять, но я не могу выразить это по-другому.
Так какой же метод лучше или я подхожу к этому совершенно неправильно? Я никого не прошу это делать, просто укажите мне правильное направление.
Заранее большое спасибо

Подробнее здесь: https://stackoverflow.com/questions/793 ... es-into-on
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»