[英]Group by common id
我正在嘗試從數據庫中獲取數據,並希望通過該ID對名為order_ids的列中的公用值進行分組。
這是我當前獲取數據的狀態
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使我的數據以這種狀態顯示或以這種狀態顯示? 如果您也想查看我的查詢,請告訴我。
您也許可以僅在MySQL中完成此操作,但如果僅創建php循環,則可能會更容易。 大多數人都喜歡foreach循環,但我喜歡while循環:
$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 />';
}
在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 } ?>
我建議您使用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和GROUP_CONCAT()的最大長度
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.