2016-06-09 30 views
0

陣列組的MySQL行我有一個MySQL表格式由列值

Mysql table format 
_______________________________ 
| column1 | column2 | column3 | 
|_________|_________|_________| 
| A  | val Z | val Y | 
|_________|_________|_________| 
| A  | val X | val W | 
|_________|_________|_________| 
| A  | val V | val U | 
|_________|_________|_________| 
| B  | val T | val S | 
|_________|_________|_________| 
| B  | val R | val Q | 
|_________|_________|_________| 
| C  | val P | val O | 
|_________|_________|_________| 

我需要做的就是把每個值的出現的所有行的列1中的數組。陣列可能是這樣的:

$A = array($row1,$row2,$row3); 

$row1 = array("column1"=>"A", "column2"=>"val Z", "column3"=>"val Y",); 

$row2 = array("column1"=>"A", "column2"=>"val X", "column3"=>"val W",); 

$row3 = array("column1"=>"A", "column2"=>"val V", "column3"=>"val V",); 

我希望我足夠清楚。基本上我需要按行1中的值的唯一性對行進行分組。

MySQL的結果所包含的所有陣列中的分組的如上所述的行。這樣的事情:

$result = array($A, $B, $C); 

我需要做的輸出是顯示在一個表中。如果有更好的方法,請讓我知道。我希望桌子採取這種格式:

_________________________________________________ 
| Header1 | Header2 | Header3 | Header4 | 
|___________|___________|___________|___________| 
| A  | val Y | val W | val U | 
|___________|___________|___________|___________| 
| B  | val S | val Q |   | 
|___________|___________|___________|___________| 
| C  | val O |   |   | 
|___________|___________|___________|___________| 

這是我唯一能想到的做法。如果有更好的方法,請讓我知道。感謝您的幫助。

+0

你的mysql查詢添加到這個問題 – Tom

+0

我有這個 '$ SQL = 「SELECT * FROM表;」; \t $ result = mysqli_query($ conn,$ sql); \t $ rows = mysqli_fetch_assoc($ result); \t \t foreach($ rows as $ row){ \t \t // print_r($ row); \t \t}'我應該在foreach循環中做什麼? – Khakali

回答

1

假設你要顯示的事實欄3在表格數據,解決辦法是這樣的:

SELECT * FROM table; 

更改您的查詢

SELECT column1, GROUP_CONCAT(column3 SEPARATOR ',') as column3 
FROM table 
GROUP BY column1 
ORDER BY COUNT(column1) DESC 

執行查詢,並按照下面的步驟,

  1. 構建從結果集的關聯數組。
  2. 從關聯數組中提取關鍵字。
  3. 數列數表中,最後
  4. 構造表

下面的代碼:

$sql = "SELECT column1, GROUP_CONCAT(column3 SEPARATOR ',') as column3 FROM table_name GROUP BY column1 ORDER BY COUNT(column1) DESC"; 
$result_set = mysqli_query($conn, $sql); 

// construct an associative array 
$result_array = array(); 
while($row = mysqli_fetch_assoc($result_set)){ 
    $result_array[$row['column1']] = explode(",", $row['column3']); 
} 

// extract the keys from the associative array 
$result = array_keys($result_array); 

// count the number of columns in the table 
$len = count($result_array[$result[0]]); 

// construct the table 
echo '<table border="1">'; 

// display table headings 
echo '<tr>'; 
for($i = 1; $i <= $len + 1; ++$i){ 
    echo '<th>Header' . $i . '</th>'; 
} 
echo '</tr>'; 

// display table contents 
foreach($result as $k){ 
    echo '<tr>'; 
    echo '<td>' . $k . '</td>'; 
    for($i = 0; $i < $len; ++$i){ 
     echo '<td>'; 
     echo isset($result_array[$k][$i]) ? $result_array[$k][$i] : ''; 
     echo '</td>'; 
    } 
    echo '</tr>'; 
} 

echo '</table>'; 

輸出:

enter image description here


注:如果你想看到$result_array陣列的結構,也var_dump($result_array);

+0

謝謝。至少我現在有桌子了。我現在可以根據我的需要調整它。謝謝。 – Khakali

+0

@Kakali很高興我能幫到你。如果它解決了你的問題,請[接受答案](http://meta.stackexchange.com/a/5235)。 –

0

我不會寫所有的代碼,但給你的解決方案的草圖:

1)feth all給你數組與行。稱它爲$rows

2)做foreach ($rows as $row)。在 內部創建值爲column 1的臨時數組。如果給定的$row中列1的值不存在於臨時數組中,請將其添加到臨時數組ad do output[] = row。否則,如果臨時數組包含從column 1上n個位置值,執行$output[n][] = $row

輸出應該循環後具有期望的形式。更直觀的方法是將column 1的值保存爲$output中的鍵並將其從行中刪除。

+0

我被困在沒有。 2.這是我到目前爲止
'$ sql =「SELECT * FROM table;」; \t $ result = mysqli_query($ conn,$ sql); \t $ rows = mysqli_fetch_assoc($ result); \t \t foreach($ rows as $ row){ \t \t // print_r($ row); \t \t}'
@Tom – Khakali