Нужна помощь с форматированием возвращаемых данных SQL - PullRequest
0 голосов
/ 28 апреля 2011

Я создал таблицу, которая приближается к этому:

Fruit  |  Date Purchased  |  Amount Purchased
----------------------------------------------
Apples  |  01-01-10  |  5
Oranges |  01-01-10  |  7
Apples  |  02-01-10  |  3
Oranges |  02-01-10  |  2
etc....

Мне нужно получить данные в следующем формате:

Apples (
    (01-01-10, 5),
    (02-01-10, 3)
)

Oranges (
    (01-01-10, 7),
    (02-01-10, 2)
)
etc...

Типы фруктов не являются фиксированными - с течением времени будет добавлено больше фруктов, поэтому это необходимо учитывать.

Я застрял на этом довольно долгое время, поэтому любые советы или подсказки будут очень признательны.

Ответы [ 3 ]

2 голосов
/ 28 апреля 2011

Мне лень найти правильный HTML-тег для вкладки, но следующий код должен вам помочь.

SELECT CONCAT(
  s.Fruit, ' (<br/>', '<tab/>',
  GROUP_CONCAT(s.DatePlusAmount SEPARATOR ',<br/><tab>'),
  '<br/>)<br/>') as FruitLine FROM 
  (
    SELECT Fruit, CONCAT(PDate, ',', IFNULL(sum(amount),0)) AS DatePlusAmount 
    FROM table1
    GROUP BY DATE
  ) s
  GROUP BY Fruit

Нет необходимости в php.

0 голосов
/ 28 апреля 2011

Вы можете перебрать все ваши записи и добавить каждую строку в соответствующий массив:

Что-то вроде:

$fruits = array();

while ($row = get_new_database_row)       /* depends on mysql, mysqli, PDO */
{
  $fruits[$row['fruit']][] = array($row['date'], $row['amount']);
}

Редактировать: На основе вашего codeigniterкомментарии, вам нужно либо result_array(), либо вам нужно изменить $row['fruit'] на $row->fruit, $row['date'] на $row->date и т. д.

0 голосов
/ 28 апреля 2011

Я бы сделал это в двух запросах:

$sql = "SELECT * FROM tabledata";
$rs = mysql_query($sql);
while( false !== ($r = mysql_fetch_assoc($rs2)))
{
   $arr_fruit[ $r['fruit'] ][ $r['date_purchase'] ] = $r['amout'];
}

на этом этапе у вас будет ассоциативный массив, который вы сможете обрабатывать дальше.

Я оставляю это как упражнение. Вернись снова, когда у вас есть проблемы. Но обязательно принесите немного кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...