@ecig

Как считать данные из таблицы MySQL и внести их в массив с последующей записью?

Доброго времени суток! Никак не могу прийти к решению проблемы.

Есть MySQL таблица вида:

ID | SESSION | PRODUCT ID | PRICE | QUANTITY
72   222145    4454512274   2000    1
73   222145    6561548945   3000    2
74   222145    5646168845   1000    1

Необходимо вытащить эти данные средствами PHP в форме массива формата
222145 => 
( PRODUCT 1 => (PRODUCT ID => 4454512274, PRICE=> 2000, QUANTITY=> 1), 
PRODUCT 2 => (PRODUCT ID => 6561548945, PRICE=> 3000, QUANTITY=> 2) , 
PRODUCT 3 => (PRODUCT ID => 5646168845, PRICE=> 1000, QUANTITY=> 1) )
  • Вопрос задан
  • 152 просмотра
Пригласить эксперта
Ответы на вопрос 2
@nozzy
Symfony, Laravel, SQL
В Laravel для этого есть Collection и groupBy.
Что бы использовать Collection без Laravel,
установи:
composer require tightenco/collect
<?php
require '/vendor/autoload.php';
use Illuminate\Support\Collection;

$array = array(
    array('id' => '7', 'name' => 'foo'),
    array('id' => '7', 'name' => 'foo2'),
    array('id' => 10, 'name' => 'bar'),
    array('id' => 10, 'name' => 'bar2'),
    array('id' => 11, 'name' => 'bar3')
);

$collection = new Collection($array);

$grouped = $collection->groupBy('id');

$grouped->each(function ($item, $key) {
    print_r($key . PHP_EOL);
    print_r($item);
});
Ответ написан
Комментировать
erge
@erge
Примус починяю
Можно результат запроса обернуть в JSON форму, а в php к результату применить json_decode($result, true)

SQL запрос:
SELECT
    CONCAT(
      '{"',`session`,'":{',
      GROUP_CONCAT('"PRODUCT ', @i:=@i+1, '":{"PRODUCT ID":',product_id,',"PRICE":',price,',"QUANTITY":',quantity,'}' separator ','),
      '}}') AS value
  FROM carts, (SELECT @i:=0) X
  WHERE `session` = 222145
  GROUP BY `session`


пример работы на sqlfiddle

в PHP как-то так:
$session_id = 222145;

$sql = 'SELECT
    CONCAT(
      \'{"\',`session`,\'":{\',
      GROUP_CONCAT(\'"PRODUCT \', @i:=@i+1, \'":{"PRODUCT ID":\',product_id,\',"PRICE":\',price,\',"QUANTITY":\',quantity,\'}\' separator \',\'),
      \'}}\') AS value
  FROM carts, (SELECT @i:=0) X
  WHERE `session` = %s
  GROUP BY `session`';

$arr = json_decode(mysql_result(mysql_query(sprintf($sql, $session_id)),0), true);

var_dump( $arr );
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы