Использование PDO для получения JSON из таблиц буксировки - PullRequest
1 голос
/ 23 октября 2019

Я пытаюсь получить объект JSON из двух таблиц в базе данных MySQL, но ничего не возвращается.

product table: id, title, description, price
product_colors table: id, product_id, product_color

Мой код PHP:

$st = $conn->prepare ('SELECT `product`.id , `product`.title, `product`.description, `product`.price, GROUP_CONCAT(`product_colors`.product_color) AS colors FROM `product` LEFT JOIN `product_colors` ON `product`.id = `product_colors`.product_id GROUP BY `product`.id');


$st->execute();
$products = [];
$rows = $st->fetchAll(\PDO::FETCH_ASSOC);

foreach ($rows as $row) {
    $row['product_colors'] = explode(',', $row['product_color']);
    $products[] = $row;
}
echo json_encode ($products);

Это то, что я хочуполучить:

[
  {
  id: 4,
  title: 'Car',
  description: "Pellentesque orci lectus",
  price: '120$',
  product_color: ['Red', 'Blue', 'Black']
  },

  {
  id: 6,
  title: 'Bus',
  description: "orci lectus",
  price: '10$',
  product_color: ['White', 'Blue', 'Green']
  }
]

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Все еще рассматриваете PDO? Вы можете хотеть этого ...

<?php

    $output = array();
    $products = 'product'; // "product" Table
    $colors = 'product_colors'; // "product_colors" Table

    //if "id" is auto-incremented which may not match "product_id", You may want to create another "product_id" in $products table to use the $statement commented below

    /*

    $statement = $connection->prepare(
        "SELECT t.product_id, t.title, t.description, t.price, c.product_color FROM `$products` t, `$colors` c WHERE t.product_id = c.product_id"
    );

    */
    $statement = $connection->prepare(
        "SELECT t.id as product_id, t.title, t.description, t.price, c.product_color FROM `$products` t, `$colors` c WHERE t.product_id = c.product_id"
    );

    $statement->execute();
    $result = $statement->fetchAll();

    foreach($result as $row)
    {
        $output['id'] = $row['product_id'];
        $output['title'] = $row['title'];
        $output['description'] = $row['description'];
        $output['price'] = $row['price'];
        $output['product_color'] = explode(',', $row['product_color']);
    }

    echo json_encode($output);

?>
0 голосов
/ 24 октября 2019

Итак, наконец, я получил ответ, во-первых, запрос правильный и совершенный, ошибка при извлечении и цикле, так что это идеальное решение и гораздо проще:

$rows = array();
while($r = mysqli_fetch_assoc($sth)) {
    $r['colors']=explode(',', $r['colors']); //colors like what i named the GROUP_CONCAT
    $rows[] = $r;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...