2016-07-15 2 views
1

Ok, ich habe eine einfache Frage zu stellen ... Ich habe eine Datenbank mit zwei Tabellen:MySQL: Anfrage ein JSON-Objekt mit Array

Artikel (id, Inhalt, Titel, Datum)

Kommentare (id_article, Benutzername, Inhalt)

Und ich möchte ein JSON-Array wie folgt erhalten:

[ 
    { 
    "id": "5785634a87c5a0075bf211de", 
    "title": "Elita", 
    "content": "Commodo ea enim dolor enim adipisicing ut mollit .", 
    "date":"15July2016" 
    "comments": [ 
     { 
     "username": "Tran", 
     "content": "Ea aliqua sit fugiat adipisicing." 
     }, 
     { 
     "username": "Noreen", 
     "content": "Commodo qui ea nulla est officia. non." 
     }, 
     { 
     "username": "Gilliam", 
     "content": "Esse cupidatat adipisicing sit minim." 
     } 
    ] 
    } 
] 

Also meine Frage ... Ist das mit nur einer Anfrage möglich? :) Danke Sie

+0

Ja. Sie müssen die MySQL-Abfrage zu den Tabellen hinzufügen. Mit dem Ergebnis dieser Abfrage erstellen Sie ein assotiatives Array in PHP und geben es als JSON zurück. Wenn also die Frage ist "Ist es möglich?", Dann Ja. Wenn Sie mehr technische Details wünschen, lassen Sie es mich wissen. Viel Glück! – SrAxi

+0

Wow danke für deine Antwort @SrAxi wenn das möglich wäre um mehr Details zu bekommen (; technisch) wäre es ein Vergnügen;) Danke –

+0

Ich habe versucht einen Join zu machen (Outer Join denke ich) aber wenn ich das mache ich nur habe einen Kommentar zu dem Artikel ... Ich kann zwei Anfragen stellen, eine für den Artikel und eine für die Kommentare, mache ein Skript php, um sie zu verbinden und warf es als JSON, aber ich dachte über die Möglichkeit nach, das in sql zu machen ...;) –

Antwort

1

Sie können JOIN LINK verlassen, um alle Daten zu erhalten, die Sie benötigen, wenn Sie darüber iterieren, müssen Sie nur darauf achten, wie Sie mit welchen Daten umgehen.

$lastArticleId = null; 
$comments = []; 
$elements = []; 
$sql = 'SELECT Articles.*, Comments.content AS comment, Comments.username FROM Articles LEFT JOIN Comments ON Articles.id = Comments.id_article'; 
$result = $pdo->query($sql); 
foreach ($result->fetchAll(PDO::FETCH_OBJ) as $dataset) { 
    if($lastArticleId !== $dataset->id){ 
     $lastArticleId = $dataset->id; 
     $elements[$lastArticleId] = [ 
      'id'  => $dataset->id, 
      'title' => $dataset->title, 
      'content' => $dataset->content, 
      'date'  => $dataset->date, 
      'comments' => [], 
     ]; 
    } 
    $comments[$lastArticleId][] = [ 
     'content' => $dataset->comment, 
     'username' => $dataset->username, 
    ]; 
} 
foreach ($elements as $key => $article) { 
    $article['comments'] = $comments[$key]; 
    $fullData[] = $article; 
} 
echo json_encode($fullData); 

Aber: Nur weil Sie können, bedeutet nicht, Sie sollten.

Die Aufteilung dieser Aufgabe in zwei Abfragen ist viel einfacher zu schreiben und zu lesen. Wenn Sie also später aus irgendeinem Grund dieses Stück Code (oder jemand anderen) berühren müssen, wird er froh sein, dass Sie den 2-Abfrage-Ansatz gewählt haben.

Es ist auch eine gute Übung, Aufgaben zu teilen, also würden Sie idealerweise Methoden in Ihrem Datenbankzugriffslayer getAllArticles() und einem anderen getCommentsByArticleId($id_article) erstellen. Auf diese Weise können Sie alle Kommentare abrufen, ohne den gesamten Artikel laden zu müssen.

+0

Hmmm nur mit meiner Neugierde Ich werde es später testen ... Danke für Ihre Hilfe! Das scheint gut, du bist super :) –

+0

Ach ja, in der deutschen PHP-Community heißt das "Gruppenbruch" -> "breaking (into) groups"; Wenn Sie die gesamten Daten nach bestimmten Kriterien in Gruppen aufteilen. http://php-de.github.io/jumpto/gruppenbruch/#beispiel-1b der Text herum ist Deutsch, aber Sie sollten dieses einfache Beispiel überprüfen – Philipp

+0

Ok ich werde es betrachten ... Danke für Ihren Code, es funktioniert perfekt ;) –

1

Am Ende müssen Sie zwei Abfragen tun, -.-‘

würde hier den PHP-Code sein (getJSON.php, zum Beispiel):

$array = []; 
$sql = 'SELECT * FROM Articles'; 
$q = mysql_query($sql) or die ("Error in $sql: ".mysql_error()); 
while ($rs = mysql_fetch_object($q)) { 
    $element = [ 
     'id'  => $rs->id, 
     'title' => $rs->title, 
     'content' => $rs->content, 
     'date'  => $rs->date, 
     'comments' => [], 
    ]; 

    $sql2 = 'SELECT * FROM Comments WHERE id_article = '.$rs->id; 
    $q2 = mysql_query($sql2) or die ("Error in $sql2: ".mysql_error()); 
    while ($rs2 = mysql_fetch_object($q2)) { 
     $comment = [ 
      'username' => $rs2->username, 
      'content' => $rs2->content, 
     ]; 

     $element['comments'] = $comment; 
    } 

    $array[] = $element; 
} 

echo json_encode($array); 

und dies, wie die jQuery oder JavaScript-Aufruf könnte zu erhalten, dass JSON in pHP-Skript generiert:

jQuery.getJSON('getJSON.php', {}, function (data) {} 

und gut, dann der Rest Sie bereits haben ich denke, ...

Ich hoffe es hat dir geholfen. Gib mir Bescheid! Und viel Glück! ;)

+0

Vielen Dank;) Ok ich werde das tun. Du bist ein Chef! –

+0

Lass mich wissen, wie es geht, Mann. Überprüfen Sie dies: http://api.jquery.com/jquery.getjson/ Für die JSON-Behandlung. – SrAxi

+0

Eine zweite Abfrage sollte nicht erforderlich sein – Philipp