2012-03-13 4 views
0

私は単純なテーブルを持っている:MySQLのPHPの行数+割合

-- ---------------------------- 
CREATE TABLE `clothes` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `shirt` text NOT NULL, 
    `color` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`); 
-- ---------------------------- 

サンプルテーブルの内容:

id shirt color 
1 long white 
2 short yellow 
3 long blue 
4 long blue 
5 long white 
6 short white 
7 short white 
8 long yellow 
9 long yellow 
10 short yellow 

私の最終的な目標は、この形式に結果を供給することである。

<ul> 
<li>Total Rows: <?php echo $totalRows; ?></li> 

<li>total yellow count: <?php echo $yellowCount; ?></li> 
<li>total yellow percent: <?php echo $yellowPercentage; ?></li> 

<li>total blue count: <?php echo $blueCount; ?></li> 
<li>total blue percent: <?php echo $bluePercentage; ?></li> 

<li>total white count: <?php echo $whiteCount; ?></li> 
<li>total white percent: <?php echo $whitePercentage; ?></li> 
</ul> 

結果(四捨五入):

<ul> 
    <li>Total Rows: 10 </li> 

    <li>total yellow count: 4</li> 
    <li>total yellow percent: 40%</li> 

    <li>total blue count: 2</li> 
    <li>total blue percent: 20%</li> 

    <li>total white count: 4</li> 
    <li>total white percent: 40%</li> 
    </ul> 

私は、様々なコードを試してきたが、私がする必要がある場所は何も私を得ていない。これではほとんどそこに私を取得

<?php 

    $con = mysql_connect("localhost","root","password"); 
    if (!$con) 
     { 
     die('Could not connect: ' . mysql_error()); 
     } 

    mysql_select_db("inventory", $con); 

    // Make a MySQL Connection 

$query = "SELECT color, COUNT(color) FROM clothes GROUP BY color"; 

$result = mysql_query($query) or die(mysql_error()); 

// Print out result 
while($row = mysql_fetch_array($result)){ 
    echo "There are ". $row['COUNT(color)'] ." ". $row['color'] ." items."; 
    echo "<br />"; 
} 

    ?> 

- しかし、私はのために結果を分離できるようにする必要がありますHTMLに挿入する:

There are 4 white items. 
There are 4 yellow items. 
There are 2 blue items. 

すべてのアイデアをいただければ幸いです。感謝します。ここで

+0

少なくとも、クエリを書き終えて試してみてください...何が起こるかを見てください。一度結果を見ると、どこが間違っているのか分かります。あなたはCOUNTで正しい軌道に乗っています - 色ごとのカウントを分離するためにWHERE句を使用する必要もあります。 – JTeagle

+0

あまり役に立ちません! :) – ven

+0

あなたはその時点で実行可能なサンプルを提供していませんでした。人々が何の努力もせずに答えを出すだけなら、あなたは何も学ばない。少なくとも、ここに来るときには、助けを求める前にコンパイルして試してみるべきです。そうすれば、最初にtry/fail/debugシーケンスを実行する経験を得ることができます。私を信じて、あなたはもっと学びます。 Rohanが下で述べたように、あなたは何らかの努力をする必要があります。 – JTeagle

答えて

4

は、あなたが何ができるかです:

SELECT color, COUNT(*) AS color_count FROM clothes GROUP BY color 

のようにあなたが結果を取得する必要があります:あなたが行の合計数(の合計を計算するためにこのデータが十分でなければなりません

color color_count 
yellow 7 
red  1 
white 9 

すべてのcolor_countの値)とそのパーセンテージ(単に除算)です。

ので、PHPであなたのようなものがあります:あなたは持っているものの端で

$query = "SELECT color, COUNT(*) AS color_count FROM clothes GROUP BY color"; 
$result = mysql_query($query); 
$values = array(); 
$pct = array(); 
$total = 0; 

while ($row = mysql_fetch_assoc($result)) { 
    $values[$row["color"]] = $row["color_count"]; 
    $total += $row["color_count"]; 
} 

foreach($values as $key => $value) { 
    $pct[$key] = $value/$total; 
} 

そうに、$values["yellow"]はあなたに黄色い服の数を与えるだろう、と$pct["yellow"]*100はあなたの割合を与えます服は黄色です。

+0

私はこれを試してパーズエラーを出しました:パースエラー:構文エラー、予期しないT_AS、 ';' for($ values = $ $ value){ $ pct [$ key] = $ value/$ total; } – ven

+0

私の悪い.. foreachに変更してください。 –

+0

あなたの助けを借りてくれたRohanに感謝しますが、今foreachを修正すると結果は出力されません:) – ven