2015-10-13 2 views
0

Я стараюсь делать очень простые вещи, но не могу заставить его работать. Я вижу здесь несколько сложных похожих потоков, но я не могу их обойти.Создайте json, содержащий все заголовки из группы по результату запроса

Я упростил свою проблему, поэтому у меня есть только одна таблица с двумя рядами. Продукты и название. Продукты имеют схожее имя, но названия нет, и я хочу получить его в 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

UPDATE: Так я в состоянии получить 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" 
     } 
    ] 
    } 
} 
+0

Попробуйте использовать GROUP_CONCAT. –

+0

Да, спасибо, но не уверен, что это лучший способ, а также не уверен, как добавить еще одну строку $ query = mysqli_query ($ con, "SELECT products, GROUP_CONCAT (title) as title FROM mylist GROUP BY products"); – alflashy

ответ

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

+0

Да, это работает, но очень ограничено только двумя строками. Как добавить дополнительные строки, такие как цена, url, описание и т. Д. – alflashy

+0

'SELECT products, GROUP_CONCAT (название, цена, адрес ORDER BY товары ASC SEPARATOR ',') AS тычет ОТ MyList GROUP BY – alflashy

+0

так 'продуктов, приведенный выше код дает мне эту – alflashy

Смежные вопросы