Как правильно составить sql запрос на получение данных по заказу?

Ребят, есть база магазина на mysql, мне нужно выдернуть (через php) заказы от туда. Таблица с заказами вида

ID|ORDER_ID|PRICE|DATE_INSERT|NAME|QUANTITY|PRICE

Когда вытаскиваю заказы получается вот такой ответ

Array
(
    [ID] => 14
    [ORDER_ID] => 6
    [PRICE] => 1259.1000
    [DATE_INSERT] => 2015-10-29 11:40:14
    [QUANTITY] => 1.0000
    [NAME] => Нижнее белье Белая Свобода
)
Array
(
    [ID] => 15
    [ORDER_ID] => 6
    [PRICE] => 2999.0000
    [DATE_INSERT] => 2015-10-29 11:40:31
    [QUANTITY] => 1.0000
    [NAME] => Платье Весенняя Легкость
)
Array
(
    [ID] => 16
    [ORDER_ID] => 7
    [PRICE] => 999.0000
    [DATE_INSERT] => 2015-10-29 12:10:39
    [QUANTITY] => 1.0000
    [NAME] => Домашние Тапочки Любимый Спорт
)


Хотелось, чтобы было так:
Array
(
    [ORDER_ID] => 6
    [DATE_INSERT] => 2015-10-29 11:40:31
          Array (
                        [PRICE] => 1259.1000
                        [QUANTITY] => 1.0000
                        [NAME] => Платье Весенняя Легкость
          )
          Array(
                        [PRICE] => 2999.0000
                        [QUANTITY] => 1.0000
                        [NAME] => Нижнее белье Белая Свобода
         )
)


Как так сделать?

Ах да, забыл. Вот мой запрос
$query = mysql_query('SELECT ID,ORDER_ID,PRICE,DATE_INSERT,QUANTITY,NAME FROM `b_sale_basket` WHERE DATE_FORMAT(`DATE_INSERT`,\'%Y%c%e%H%i%s\')>'.mysql_real_escape_string($_GET['date']).'');
  • Вопрос задан
  • 730 просмотров
Решения вопроса 2
nskarl
@nskarl
Вообще дизайнер
одним запросом нельзя собрать массив в массиве
два варианта решения:

1. два отдельных запроса, потом сборка одного массива, описывал вот тут: Есть задачка по выгрузке данных. Какие есть идеи?

2. подзапрос в запросе
datas = mysql select * from table

foreach(datas as key => data) {
datas[key][subdata] = mysql select * from table where data[id]
}

предпочтительнее первый вариант
Ответ написан
@nozzy
Silex, Symfony, Laravel, SQL
2-ой вариант.
В Вашем запросе из шапки добавить - order by ORDER_ID, DATE_INSERT
После выполнения запроса (не проверял):
$orders = array();
$unique_order_ids = array();
$result_arr = array();

foreach($rows as $row){

	array_push($orders, $row);
 
	if(!in_array($row['ORDER_ID'], $unique_order_ids)){
		
		array_push($unique_order_ids, $row['id']);
	}	
}


foreach($unique_order_ids as $id){
	
	$order_arr = array();

	$order_arr['ORDER_ID'] = $id;
	
	foreach($orders as $order){
			
		if($order[1] == $id){

		   array_push($order_arr, array(
				  'PRICE' => $order[2],
				  'QUANTITY' => $order[*]
				  // и тд
			));
		}
	}
	
	array_push($result_arr, $order_arr);	
}

$json = json_encode($result_arr);

print_r($result_arr);


Вытащить по ORDER_ID все заказы в одну строку - разделитель заказов '||'
должно получиться :
1259.1000,2015-10-29 11:40:14,1.0000,Нижнее белье Белая Свобода||2999.0000,2015-10-29 11:40:31,1.0000,Платье Весенняя Легкость|| и тд

(запрос не проверял):

select
ORDER_ID as id,
GROUP_CONCAT(CONCAT_WS (',', PRICE, DATE_INSERT, NAME, QUANTITY, PRICE) SEPARATOR '||') as order
from b_sale_basket
where DATE_INSERT = your_date
group by ORDER_ID
order by ORDER_ID

Далее for each и парсить при помощи explode поле order и собирать масив в масиве.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
martin74ua
@martin74ua
Linux administrator
group by order_id ?
Ответ написан
Ваш ответ на вопрос

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

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