簡體   English   中英

用相同ID的PHP組合MySQL行

[英]Combing MySQL Rows With Same ID PHP

我有一個表格“ orders”,其中保存了網站上的所有訂單。 它通過以下方式保存數據:

ID | Session_id | image | item | extra | customer_name 

樣品日期

 12 | sdgfafjhsf | image1.jpg | coffee | milk | roger
 13 | sdgfafjhsf | image1.jpg | muffin | jam  | roger
 14 | fjgjgsdfjg | image3.jpg | coffee | none | John

目前,我有PHP來訪問數據庫並逐一列出所有清單。

 mysql_connect("localhost", "root", "") or die(mysql_error()) ; 
 mysql_select_db("store") or die(mysql_error()) ; 

 //Retrieves data from MySQL 
 $data = mysql_query("SELECT * FROM orders WHERE status ='ordered'") or die(mysql_error());  //Puts it into an array 
 while($info = mysql_fetch_array( $data )) 
 { 

 //Outputs the image and other data

 Echo "$info[customer_name] <img src='cameras/$info[image]'/>  : $info[item] with $info[extras] <br />"; 


 }

理想情況下,我希望數據按會話ID分組。 因此,它將一次打印出客戶的姓名和圖像,然后再打印與之關聯的所有項目。

例如。 羅傑,咖啡,牛奶,松餅,果醬

有任何想法嗎? 謝謝!

好吧,試試這個

 SELECT Session_id,image,item,extra,customer_name FROM orders WHERE status='ordered' group by Session_id,image,item,extra,customer_name

一種簡單的方法是對SQL進行排序,以使您可以從每個會話中獲得彼此相鄰的所有條目,並且只需記住您獲取的最后一個會話ID,即可知道是否應輸出名稱和圖片。 這是一些偽代碼來說明我的意思;

$data = 
  mysql_query("SELECT * FROM orders WHERE status ='ordered' ORDER BY session_id")
                or die(mysql_error());

$last_session_id = "**DUMMY**";  // Set a dummy value to not match the first row

while($info = mysql_fetch_array( $data )) 
{ 
  if($info['session_id'] != $last_session_id) 
  {
    //Outputs the image and other data if a new session_id has been found
    echo "$info[customer_name] <img src='cameras/$info[image]'/>  : $info[item] with $info[extras] <br />"; 
    $last_session_id = $info['session_id'];
  } else {
    // Same session_id as last row, skip name and picture
    echo "$info[item] with $info[extras] <br />"; 
  }
}

作為附帶說明,不建議使用mysql_*數據庫API,而應考慮改用mysqlipdo

在這里,您必須運行兩個單獨的查詢。 在第一個查詢中,您必須找到所有不同的客戶名稱,最好使用客戶ID而不是客戶名稱,因為ID不能重復。 然后,在獲得所有已訂購商品的客戶之后,對其進行循環迭代,並在內部循環中運行另一個查詢,以再次通過客戶ID或客戶名稱檢索該客戶的所有訂單。

while($info = mysql_fetch_array( $data )) loop中,在其中打印輸出的地方,可以將其添加到鍵為Session_ids的標准數組中。

然后調用echo $foo['sdgfafjhsf']來獲得一個帶有db-entries的數組,您可以通過print進行相應枚舉。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM