Как сделать, чтобы моя переменная была результатом двух разных запросов?

Пробовали это с UNION, но без особого успеха. Не знаю, как управлять разными параметрами в bind_param - в одном случае это $user_id, в другом случае $contact_id.

У меня есть два SQL запроса:

1.

$sql = "SELECT * FROM review_shared INNER JOIN category ON review_shared.cat_id = category.cat_id 
            INNER JOIN contacts ON review_shared.contact_id = contacts.user_id 
            WHERE review_shared.contact_id = ?"; 

    $stmt2 = $con->prepare($sql) or die(mysqli_error($con));
    $stmt2->bind_param('i', $user_id) or die ("MySQLi-stmt binding failed ".$stmt2->error);
    $stmt2->execute() or die ("MySQLi-stmt execute failed ".$stmt2->error);

    $privateReviews = $stmt2->get_result();

2.

$sql = "SELECT * FROM review_shared INNER JOIN category ON review_shared.cat_id = category.cat_id 
            INNER JOIN contacts ON contacts.user_id INNER JOIN review
            WHERE review_shared.contact_id = ? AND review.public_or_private = 2"; 

            $stmt2 = $con->prepare($sql) or die(mysqli_error($con));
            $stmt2->bind_param('i', $contact_id) or die ("MySQLi-stmt binding failed ".$stmt2->error);
            $stmt2->execute() or die ("MySQLi-stmt execute failed ".$stmt2->error);

            $privateReviews = $stmt2->get_result();

Как мне сделать $privateReviews результатом этих двух запросов?

$privateReviews[] = $stmt1->get_result(); $privateReviews[] = $stmt2->get_result(); ?
treyBake 06.06.2019 12:46
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать 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 и хотите разрабатывать...
0
1
94
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Вы можете поместить оба объекта в массив и получить доступ через индекс:

$privateReviews[] = $stmt1->get_result(); $privateReviews[] = $stmt2->get_result();

Или другая альтернатива: вы можете объединить объекты:

$obj_merged = (object) array_merge((array) $stmt1->get_result(), (array) $stmt2->get_result();

Обновлено:

Поскольку вы используете метод массива, вам нужно поместить цикл for вокруг цикла while:

for($i = 0; $i < 2; $i++){
    while($row = $privateReviews[$i]->fetch_assoc()){
        echo $row['DB COLUMN NAME'];
    }
}

Кроме того, если обе ваши команды SQL ссылаются на одну и ту же таблицу и имеют одинаковые поля, почему бы вместо этого не попробовать UNION ваши запросы?

Спасибо, но дальше while (($row = $privateReviews[]->fetch_assoc())) { etc...} не работает.

CHarris 06.06.2019 13:29

Вам нужно указать индекс: $privateReviews[0]->fetch_assoc(), где 0 — первый экземпляр в массиве. 1 будет вторым экземпляром.

Mark 06.06.2019 13:34

ок, спасибо за помощь, нужно идти сейчас, но посмотрю сегодня вечером. Так что это будет что-то вроде: while (($row = $privateReviews[0] Or $row = $privateReviews[1] ->fetch_assoc())) {...} ?

CHarris 06.06.2019 13:45

Вы можете просто использовать СОЮЗ в sql, особенно если вы выполняете запрос к одной таблице.

$sql = "(SELECT a.* FROM review_shared a INNER JOIN category ON review_shared.cat_id = category.cat_id 
    INNER JOIN contacts ON review_shared.contact_id = contacts.user_id 
    WHERE review_shared.contact_id = ?)
    UNION
    (SELECT b.* FROM review_shared b INNER JOIN category ON review_shared.cat_id = category.cat_id 
    INNER JOIN contacts ON contacts.user_id INNER JOIN review
    WHERE review_shared.contact_id = ? AND review.public_or_private = 2)";

$stmt2 = $con->prepare($sql) or die(mysqli_error($con));
$stmt2->bind_param('ii', $contact_id, $contact_id) or die ("MySQLi-stmt binding failed ".$stmt2->error);
$stmt2->execute() or die ("MySQLi-stmt execute failed ".$stmt2->error);

$privateReviews = $stmt2->get_result();

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