按查询结果创建包含所有标题的json

时间:2015-10-13 01:50:16

标签: php group-by group-concat

我正在尝试做非常简单的事情,但无法让它发挥作用。我在这里看到一些复杂的类似线程,但我无法解决这些问题。

我简化了我的问题所以我只有一个包含两行的表。产品和标题。产品有相似的名称,但标题没有,我想在json得到它但我仍然坚持只是获得所有的标题。这是我的代码

$query = mysqli_query($con, "SELECT* FROM mylist GROUP BY products");
while($row = $query->fetch_array()){
echo $row['products'].' - '; 
echo $row['title'];
echo "<br>";

我得到的结果就是这个

prod1 - title 4
prod2 - title 2
prod3 - title 3

但我期待这个

prod1 - title 4, title 1
prod2 - title 2
prod3 - title 3

然后在json中编码

更新: 所以我能够像这样获得JSON

{"prod1":["title 4,title 1"],"prod2":["title 2"],"prod3":["title 3"]}

使用此代码

$request = <<< EOT
SELECT products, GROUP_CONCAT(title) AS title
FROM mylist
GROUP BY products
ORDER BY products ASC;
EOT;

$rows = $con->query($request)->fetchAll(PDO::FETCH_ASSOC);
$items= array();
foreach ($rows as $row){
    $days[$row['products']]= explode(",", $row['title']);
}
var_dump($items);
echo json_encode($items);

但我仍然在寻找一些小调整。我怎么能像这样得到json

{
"prodlist": {
    "prod1": [
        {
            "title": "title5"
        },
        {
            "title": "title1"
        }
    ],
    "prod2": [
        {
            "title": "title5"
        }
    ]
  }
}

1 个答案:

答案 0 :(得分:0)

您需要GROUP_CONCAT这样

SELECT products, GROUP_CONCAT(title ORDER BY products ASC SEPARATOR ', ') AS prods 
FROM mylist  
GROUP BY products

以下是完整的SQL小提琴:http://sqlfiddle.com/#!9/38681/7