Я пытаюсь объединить несколько запросов в один набор результатов, который я могу 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);
Я считаю, что раньше я комбинировал подобные запросы, поэтому я не уверен, что я делаю не так здесь. Кроме того, есть ли лучшая альтернатива этому, чем два отдельных запроса? Что-то, чтобы объединить их в одном запросе? Спасибо.