2016-09-16 7 views
0

すべての結果を取得してHTML表にプッシュする必要がありますが、既存の行は1行に結合する必要があります。既存の行の値をマージする方法

これは私のテーブル

id domain  php_version 
----------------------------- 
1 localhost 5.5.30 
2 live   7.05 
3 localhost 5.5.30 
4 localhost 5.5.30 

とHTMLテーブルが出力コードです:

// Prepare query 
$stmt = $mysqli->prepare("SELECT * FROM domains ORDER BY domain ASC LIMIT 10"); 
// Execute the query 
$stmt->execute(); 
// Bind Parameters 
$stmt->bind_result($id, $domain, $php_version); 

<?php while ($stmt->fetch()) : ?> 
<tr class="row-id-<?php echo $id; ?>"> 
    <td class="id"><?php echo $id; ?></td> 
    <td class="domain"><?php echo $domain; ?></td> 
    <td class="php_version"><?php echo $php_version; ?></td> 
</tr> 
<?php endwhile; ?> 

出力は次のようになります。

enter image description here

そして、ちょうどIこのようになりたい:

私はちょうど1行/列に

をdublicatedドメインの値を組み合わせたい

enter image description here

はどうもありがとうございました!

+0

あなたが 'domain'で注文した場合、実際の出力はあなたが私たちに示すものとは異なります。 –

+1

http://stackoverflow.com/questions/13451605/how-to-use-group-concat-in-a-concat-in-mysqlが役立ちます。 – lshettyl

+0

ありがとうございましたlshettyl – tweb

答えて

0

私は私が行うために管理することを考えますそれとgroup_concatと:

SELECT domain, 
     GROUP_CONCAT(DISTINCT php_version SEPARATOR '\n') php_versions, 
     ... 
FROM domains GROUP BY domain 
0

まずmysqlののうちと(私のコードで$配列と呼ばれる)、通常のPHP配列に結果を取得し、このスニペットは、あなたがやりたいことになります。

function sort_by_php_version($a, $b) 
{ 
    if ($a["php_version"] == $b["php_version"]) { 
     return 0; 
    } 
    return ($a["php_version"] < $b["php_version"]) ? -1 : 1; 
} 

$array = [ 
["id"=>1, "domain"=>"localhost", "php_version"=>"5.5.30"], 
["id"=>2, "domain"=>"live", "php_version"=>"7.05"], 
["id"=>3, "domain"=>"localhost", "php_version"=>"5.5.30"], 
["id"=>4, "domain"=>"localhost", "php_version"=>"5.5.30"], 
]; 

usort($array, "sort_by_php_version"); 

$in_domain = null; 
$output_array = array(); 

for ($i=0; $i<count($array); $i++) 
{ 
    $thisRow = $array[$i]; 
    $domain = $thisRow["domain"]; 
    if ($domain == $in_domain) { 
     $output_array[count($output_array) - 1]["php_versions"][] = $thisRow["php_version"]; 
    } else { 
     $thisRow["php_versions"] = array($thisRow["php_version"]); 
     unset($thisRow["php_version"]); 
     $output_array[] = $thisRow; 

     $in_domain = $domain; 
    } 
} 

var_dump($output_array); 
+0

OKですが、将来もっと多くの列があるとしたら? – tweb

+1

データベースから '$ array 'を動的に構築するのは、ここで値をハードコードするのではなく、この場合、列を追加するときは、反復ループを変更してそれらの列を含め、必要なものを実行してください。どのような種類の列の変更が予測されるかは予測できませんので、その範囲は広範囲にわたります。 – coderodour

関連する問題