Невозможно объединить два запроса в один объект json - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь объединить несколько запросов в один набор результатов, который я могу json_encode. Я пытаюсь получить статью пользователя и статью topi c в первом запросе и количество лайков во втором запросе. Я использую AJAX для извлечения данных из базы данных. Мой код AJAX выглядит следующим образом, у него, похоже, нет проблем:

$.ajax({
    url: 'includes/articles/getArticlePreview.php',
    type: 'POST',
    data: {articleId: articleId, idUsers: idUsers},
    dataType: 'json',
    success: function(data) {
        data.forEach(function(item) {

            console.log(item.voteCount);
            console.log(item.article);
            console.log(item.topic);

        });
    }
});

, а на бэкэнде я сделал два отдельных запроса и попытался объединить их в один JSON объект. Мой первый запрос выглядит так:

include '../dbh.inc.php';

$idUsers = mysqli_real_escape_string($conn, $_POST['idUsers']);
$articleId = mysqli_real_escape_string($conn, $_POST['articleId']);

$q = "SELECT COUNT(*) FROM articlevotes WHERE articlevotes.article_id = '$articleId'";
$r = mysqli_query($conn, $q);
while ($row = mysqli_fetch_array($r)) {

    $voteCount = $row['COUNT(*)'];
    $data['voteCount'] = $voteCount;

}

Это возвращает счетчик голосов просто отлично. Затем я добавляю свой второй запрос:

$query = "SELECT articles.article, articles.topic FROM articles WHERE articles.article_id = '$articleId' AND articles.idUsers = '$idUsers'";
$result = mysqli_query($conn, $query);
while ($row = mysqli_fetch_array($result)) {

    $article = $row['article'];
    $topic = $row['topic'];
    $data['article'] = $article;
    $data['topic'] = $topic;

}

Это также прекрасно работает само по себе (когда я удаляю первый запрос и кодирую только этот). Но когда я пытаюсь поместить их все в массив $results[] = $data; и echo json_encode($results);, я получаю только «voiceCount» в объекте JSON, а когда я go в сеть, и нажимаю на файл, который содержит запросы, я получаю сообщения об ошибках:

Notice: Undefined index: idUsers in C:\xamp\htdocs\Real Website\includes\articles\getArticlePreview.php on line 5

Notice: Undefined index: articleId in C:\xamp\htdocs\Real Website\includes\articles\getArticlePreview.php on line 6
[{"voteCount":"0"}]

Вот весь запрос, собранный вместе:

<?php

include '../dbh.inc.php';

$idUsers = mysqli_real_escape_string($conn, $_POST['idUsers']);
$articleId = mysqli_real_escape_string($conn, $_POST['articleId']);

$q = "SELECT COUNT(*) FROM articlevotes WHERE articlevotes.article_id = '$articleId'";
$r = mysqli_query($conn, $q);
while ($row = mysqli_fetch_array($r)) {

    $voteCount = $row['COUNT(*)'];
    $data['voteCount'] = $voteCount;

}

$query = "SELECT articles.article, articles.topic FROM articles WHERE articles.article_id = '$articleId' AND articles.idUsers = '$idUsers'";
$result = mysqli_query($conn, $query);
while ($row = mysqli_fetch_array($result)) {

    $article = $row['article'];
    $topic = $row['topic'];
    $data['article'] = $article;
    $data['topic'] = $topic;

}

$results[] = $data;
echo json_encode($results);

Я считаю, что раньше я комбинировал подобные запросы, поэтому я не уверен, что я делаю не так здесь. Кроме того, есть ли лучшая альтернатива этому, чем два отдельных запроса? Что-то, чтобы объединить их в одном запросе? Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...