2013-11-01 2 views
0

Я пытаюсь извлечь данные из своей базы данных и хотел бы группировать общие значения в столбце order_ids этим идентификатором.Группа по общему id

Это состояние я в настоящее время получаю мои данные в

Order_Id  | Product Name 

------------------------------- 
    10001  | iPhone 5 
    10001  | Blackberry 9900 
    10002  | Galaxy S 
    10003  | Rhyme 
    10004  | Google Nexus 
    10005  | Razr 
    10006  | iPad Air 

И это состояние, я хочу, чтобы получить его в

Order_Id  | Product Name 

------------------------------- 
    10001  | iPhone 5 
        Blackberry 9900 
    10002  | Galaxy S 
    10003  | Rhyme 
    10004  | Google Nexus 
    10005  | Razr 
    10006  | iPad Air 

Вот как я получаю приводят к моему файлу контроллера

foreach($results_query as $results_custom) { 
     $this->data['result_custom'][] = array(
      'model' => $results_custom['product_name'], 
      'order_number' => $results_custom['order_id'] 
     ); 
    } 

Вот как я показываю это в моем файле представления

<?php foreach ($results_custom as $result) { ?> 
<li><?php echo $result['model']; ?></li> <br /> 
<li><?php echo $result['order_number']; ?></li><br /> 
<?php } ?> 

Можно ли получить мои данные, чтобы отобразить подобное или в этом состоянии с помощью SQL или PHP? Пожалуйста, дайте мне знать, если вы хотите увидеть мой запрос.

+0

обработать это на PHP во время цикла. –

ответ

0

В PHP будет проще сделать Это. Поскольку у меня нет PHP-среды для тестирования, я покажу вам некоторую логику, чтобы сделать это. Не обязательно рабочий код. Это потому, что вы не предоставили, что вы сделали

<? 
    $sql = "select order_id, product name from ..... order by order_id"// rest of sql code .... 
    //here you iterate your results 
    $previousId = ""; //var to store previous id 
    while($fetch...){ 
     if ($fetchedID != $previousId){ 
     echo $fetchedId . "-" . $fetchedProductName; 
     }else{ 
     echo $fetchedProductName; 
     } 
     $previousId = $fetchedID; 
    } 
?> 

Это должно сделать. Как вы обновили свой код, это решение для Вас:

<?php 
    $lines = ""; //to make code cleaner; 
    $previousModel = ""; 
    foreach ($results_custom as $result) { 
    if ($previousModel != $result['model']){ 
     $line .= "<li>" . $result['model'] . "</li>"; 
    }else{ 
     $line .= "<li></li>"; 
    } 
    $line .= "<li>" . $result['model'] . "</li><br />"; 
    $previousModel = $result['model']; 
    } 
    echo $line; 
<?php } ?> 
+0

'

+0

@ Fred-ii- yeas, вот как я привык :) –

+0

Я обновил свой вопрос, пожалуйста, посмотрите, если сможете. Благодаря! – James

0

Возможно, вы можете выполнить это только в MySQL, но может быть проще, если вы просто создаете петлю php. большинство людей предпочитают цикл Еогеасп, но мне нравится, в то время как петли:

$orderid = "number"; 
$order_query = mysql_query("SELECT * FROM ordertable WHERE Order_Id = '$orderid'"); 
while($order_data = mysql_fetch_array($order_query)){ 
    $ordername = stripslashes(mysql_real_escape_string($order_data['Product Name'])); 
    echo $ordername.'<br />'; 
} 

, если вам это нужно для всех заказов вы можете удалить поиск для конкретного заказа:

$order_query = mysql_query("SELECT * FROM ordertable ORDER BY Order_Id ASC"); 
while($order_data = mysql_fetch_array($order_query)){ 
    $orderid = mysql_real_escape_string($order_data['Order_Id']); 
    $ordername = stripslashes(mysql_real_escape_string($order_data['Product Name'])); 
    echo 'ID#: '.$orderid.' - '.$ordername.'<br />'; 
} 
+0

просто подсказка, вы можете сделать это только в mysql –

+0

Можете ли вы посмотреть мой обновленный код, если у вас есть шанс? Это то, что я сейчас использую. Благодаря! – James

+0

@iamde_coder не выполняет один и тот же код дважды. –

0

Я предлагаю вам использовать GROUP_CONCAT для получения результата

Вы пытаетесь следующим

SELECT order_id,GROUP_CONCAT(product_name) as product_name FROM your_table GROUP BY order_id 

Только посмотрите на эту http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

Примечание: GROUP_CONCAT имеет ограничение по размеру. Проверьте эту ссылку для получения дополнительной информации MySQL and GROUP_CONCAT() maximum length

+0

Спасибо за ваш ответ, я посмотрю на него :) – James

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