台灣最大程式設計社群網站
線上人數
2011
 
會員總數:246139
討論主題:189723
歡迎您免費加入會員
討論區列表 >> PHP >> 資料表格形式轉換
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
資料表格形式轉換
價值 : 150 QP  點閱數:1208 回應數:17
樓主

Sasha Chang
門外漢
0 7
127 11
發送站內信

while($row=$products->fetch(PDO::FETCH_ASSOC)){
?>
<tr>
<td><?php echo $row["submission_id"]?> </td>
<td><?php echo $row["submission_data_value"]?></td>
</tr>
<?php
}
請問這是用上述php程式撈取mysql資料庫顯示的結果,如下表一

[表一]
submission_id submission_data_value
1 楊XX
1 wendyxxx@yahoo.com.tw
1 955555555
1 A班(2016/2/18)
2 楊XX
2 wendyxxx@yahoo.com.tw
2 911111111
2 B班
4 張XX
4 sashaxxx@gmail.com
4 2555-5555
4 C班
4 [親友介紹,Facebook]
9 test
9 sashaXXX@gmail.com
9 12345678
9 D班
9 [廣播電台]

要如何改寫成如下表二形式?!
[表二]
1 楊XX wendyxxx@yahoo.com.tw 955555555 A班
2 楊XX wendyxxx@yahoo.com.tw 911111111 B班
4 張XX sashaxxx@gmail.com 2555-5555 C班 [親友介紹,Facebook]
9 test sashaXXX@gmail.com 12345678 D班 [廣播電台]



搜尋相關Tags的文章: [ 資料 ] , [ 表格 ] , [ 形式轉換 ] ,
本篇文章發表於2016-03-05 12:05
1樓
回應

彩虹
檢舉此回應
你要的是不是長這樣呢?

本篇文章回覆於2016-03-05 12:54
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

彩虹
檢舉此回應
另外你資料表欄位結構可能要改一下
一個欄位submission_data_value,分別存取姓名、信箱、學號、班級...等
往後無法做資料處理,除非你有第三個欄位叫做「DataType」
試問一下,如果你撈該id的顯示「信箱」,你要怎麼下selete指令?

所以你該資料表每一列資料應該是要一次包含姓名、信箱、學號...
submission_id、submission_Name、submission_stuentNumber...
之後如果只要顯示 名字以及學號,你只要下

相信這應該會比你只用兩個欄位來的方便許多
本篇文章回覆於2016-03-05 13:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

Sasha Chang
檢舉此回應
您說的沒錯,資料表的結構本來就該一個項目一個欄位。因為這是表單的外掛,這表單後台欄位是這樣的形式,現在算是改不了資料表結構,只能改程式碼=_=!
本篇文章回覆於2016-03-05 13:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

彩虹
檢舉此回應
那你這樣的話,只能用兩層迴圈來處理了
1.先寫一個外層的迴圈

2.在1.的迴圈裡,包入另一個迴圈



大致上會長這樣子

本篇文章回覆於2016-03-05 13:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

彩虹
檢舉此回應
剛有的地方打錯,另外 submission_id的型態如果是int的話,你在自行把單引號去掉~
本篇文章回覆於2016-03-05 13:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

Sasha Chang
檢舉此回應
您好~結果出現如下,我有哪寫錯了嗎?
1 楊XX wendyxxx@yahoo.com.tw 955555555 A班
1 楊XX wendyxxx@yahoo.com.tw 955555555 A班
1 楊XX wendyxxx@yahoo.com.tw 955555555 A班
1 楊XX wendyxxx@yahoo.com.tw 955555555 A班
2 楊XX wendyxxx@yahoo.com.tw 911111111 B班
2 楊XX wendyxxx@yahoo.com.tw 911111111 B班
2 楊XX wendyxxx@yahoo.com.tw 911111111 B班
2 楊XX wendyxxx@yahoo.com.tw 911111111 B班
4 張XX sashaxxx@gmail.com 2555-5555 C班 [親友介紹,Facebook]
4 張XX sashaxxx@gmail.com 2555-5555 C班 [親友介紹,Facebook]
4 張XX sashaxxx@gmail.com 2555-5555 C班 [親友介紹,Facebook]
4 張XX sashaxxx@gmail.com 2555-5555 C班 [親友介紹,Facebook]
4 張XX sashaxxx@gmail.com 2555-5555 C班 [親友介紹,Facebook]
9 test sashaXXX@gmail.com 12345678 D班 [廣播電台]
9 test sashaXXX@gmail.com 12345678 D班 [廣播電台]
9 test sashaXXX@gmail.com 12345678 D班 [廣播電台]
9 test sashaXXX@gmail.com 12345678 D班 [廣播電台]
9 test sashaXXX@gmail.com 12345678 D班 [廣播電台]
本篇文章回覆於2016-03-05 19:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

彩虹
檢舉此回應
外面那個迴圈,你要改成另一個SQL阿...


整體來說是這樣
<?php
//這邊SQL 指令,我是先省略沒打上去
//注意這邊
$Sql_1="selec submission_id from YourTable group by (submission_id)";
//其他先省略,自行補上prepare()、$xxx_1->execute();
while($row_1=$xxx_1->fetch(PDO::FETCH_ASSOC)){?>
<tr>
<td><?php echo $xxx1["submission_id"]?> </td>
<?php
//SQL
$Sql_2="select submission_data_value from YourTable where submission_id='".$row_1["submission_id"]."'";
//其他先省略,自行補上prepare()、$xxx_2->execute();
while($row_2=$xxx_2->fetch(PDO::FETCH_ASSOC)){?>
<td><?php echo $row["submission_data_value"]?></td>
<?php }?>
</tr>
<?php }?>
本篇文章回覆於2016-03-05 19:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

彩虹
檢舉此回應
本篇文章回覆於2016-03-05 19:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
最有價值解答

彩虹
檢舉此回應
版面快被我佔滿了....(如果留言有修改功能,或補充功能,會比較方便)

發現$Sql_1裡的selec少打一個t,=>select
本篇文章回覆於2016-03-05 19:40
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

Sasha Chang
檢舉此回應
本篇文章回覆於2016-03-05 20:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

彩虹
檢舉此回應
我有發送站內信到你那邊了~我們在那邊討論吧
你程式碼有很多地方要改,我依依跟你說明一下
本篇文章回覆於2016-03-05 20:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

皮皮快跑
檢舉此回應
其實很簡單。
你只是希望能夠由資料庫重新排列資料結構。
這邊有個語法很符合你的需求。參考看看

你可以直接看看這樣跑出來的東西是不是「比較符合」你想看到的結果。
不過如果你是想再排列成表單就需要稍微再解一下內容格式就是了(內容都是以「,」隔開,所以如果你的資料本身還會有「,」的話你可能要想一下用別的符號代替,舉例:

我想,光是看到這個sql跑出來的內容,你應該就知道怎麼解決問題了吧。
本篇文章回覆於2016-03-05 22:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

皮皮快跑
檢舉此回應
喔!補充一下。
因為我把欄位名稱as成data_result(不然你原本欄位名稱好長…)
所以要記得取出時的column名稱是data_result而不是submission_data_value
本篇文章回覆於2016-03-05 22:02
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
回應

皮皮快跑
檢舉此回應
我來說一個故事……
有一場超級抽獎大會,有三萬個人報名參加。
主辦單位派了一名巡查員,負責去查找符合最終抽獎權的七個人。
於是巡查員要求所有拿到相同數字編號的人站一排……通常一組數字會有四五個人。
接著,巡查員看著這隊伍大約還有四千多排。
於是他一列一列的叫每一個隊伍的人去照順序排好。
他每排好一列都要花上5~8秒秒鐘,於是四千多隊就花了大約六七個小時才終於把隊伍整理完畢。
接著他才從第幾組第幾個人的方式…找到了這七個人……

更不幸的事情是這樣的大會還同時辦了20場………

--------------------------------------------
小明他終於看不下去這種情形了。
他站到台上,很大聲的說:所有抽到同一個號碼的人自動站成一排,且按著拿牌的順序依序站好。
接著,我唸到第幾排幾幾位,你就給我出列。
很快的…小明只花了不到幾分鐘的時間,就把七名中選人給請了出來……

---------------------------------------------
只要一個具體的指令就能一次完成的工作,就不需要過度依賴二次搜尋的動作…
這對省下伺服器資源有非常良好而且是非常重要的處理方法。

其實這些概念星空大上次就講過了………
可我還是不懂為什麼同樣的解決問題卻還是會再度出現???

雖然我不太想題這處理的過程中間還有相當多必須要處理而且要解決掉的情況。
重點是:我們到底教了別人些什麼東西?
本篇文章回覆於2016-03-06 00:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
回應

Su-Way Jhang
檢舉此回應
直接用
group by + group_concat 不就好了咩
本篇文章回覆於2016-03-06 10:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   

回覆
如要回應,請先登入.