Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL :Żądanie utworzenia obiektu JSON za pomocą Array

Możesz LEFT JOIN, aby uzyskać wszystkie potrzebne dane, podczas iteracji musisz tylko zadbać o to, jak obchodzisz się z danymi.

$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);

Ale :To, że możesz, nie oznacza, że ​​powinieneś.

Podział tego zadania na dwa zapytania jest dużo łatwiejszy do pisania i czytania. Więc jeśli później z jakiegoś powodu będziesz musiał dotknąć tego fragmentu kodu (lub kogoś innego), będzie zadowolony, że wybrałeś podejście 2 zapytań.

Dobrą praktyką jest również dzielenie zadań, więc najlepiej byłoby utworzyć metody w warstwie dostępu do bazy danych getAllArticles() i jeszcze jeden getCommentsByArticleId($id_article) . W ten sposób możesz pobrać wszystkie komentarze bez konieczności ładowania całego artykułu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd PHP (MySQL):Ostrzeżenie:mysql_num_rows() oczekuje, że parametr 1 będzie zasobem

  2. Zapisz obraz zakodowany w base64 w bazie danych po stronie serwera jako BLOB

  3. Zamówienie niestandardowe MySQL

  4. Pozostawiono Dołącz do najnowszego rekordu

  5. Jak używać mysql w C++?