2017-05-21 20 views
3

素晴らしいコサーがあると私は非常に感謝しています。 mysql/phpの私のコーディングの専門知識は限られていますが、私は頑固です。複数の列で特定の変数の出現を数える

現在までのところ、この成功したクエリでは、「zmon」という名前のビジネスに「rsmed」という列が1つしかない「重大」という従業員の数が表示されます。ビジネスのzmon ':

$host="localhost"; 
$username="user"; 
$password="pass"; 
$db_name="dbase"; 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

$query = "SELECT COUNT(*) FROM forearm WHERE business='zmon' AND rsmed = 'severe' "; 

$result = mysql_query($query) or die(mysql_error()); 
while($row = mysql_fetch_array($result)) 
{ 
echo "There are ". $row['COUNT(*)'] ." employees severe in rsmed."; 
} 

は、私がここに立ち往生しています: 私はビジネスのための「前腕」という名前のテーブル内の複数の列の「severes」(rslat、rsmed、rscentral、rselbow)の数をカウントする必要がありますzmonという名前です

したがって、列のビジネスにはビジネスの名前が含まれています。 同じビジネスは、それぞれ異なる従業員に対応する複数の行を持つことができます。 他の列(rslat、rsmed、rscentral、rselbow)には、重要ではない、低、中、高、重度の4つの変数があります。

私はそれがあなたのための十分な情報であることを望みます。

おかげで、ポール・

答えて

2

SUM(criteria)またはSUM(IF(condition, 1, 0))を使用して各列を個別にカウントするようにクエリを操作できます。

SELECT 
    SUM(rslat = 'severe') as rslat_count, 
    SUM(rselbow = 'severe') as rselbow_count, 
    SUM(rsmed = 'severe') as rsmed_count, 
    SUM(rscentral = 'severe') as rscentral_count 
FROM forearm 
WHERE business='zmon' 

データ:

| id | business | rslat | rselbow | rsmed | rscentral | 
|----|----------|--------|---------|--------|-----------| 
| 1 |  zmon | severe | severe | severe |  good | 
| 2 |  zmon | severe | severe | good |  good | 
| 3 |  zmon | good | severe | good |  good | 
| 4 |  zmon | severe | severe | good |  good | 

結果:http://sqlfiddle.com/#!9/093bd/2

| rslat_count | rselbow_count | rsmed_count | rscentral_count | 
|-------------|---------------|-------------|-----------------| 
|   3 |    4 |   1 |    0 | 

次にあなたが

$sentence = 'There are %d employees severe in %s'; 
while ($row = mysql_fetch_assoc($result)) { 
    printf($sentence, $row['rslat_count'], 'rslat'); 
    printf($sentence, $row['rselbow_count'], 'rselbow'); 
    printf($sentence, $row['rsmed_count'], 'rsmed'); 
    printf($sentence, $row['rscentral_count'], 'rscentral'); 
} 

を使用してPHPで結果を表示することができます

更新

個々の列の派生合計を取得するには、それらを追加するだけです。 http://sqlfiddle.com/#!9/093bd/10

| severe_total | rslat_count | rselbow_count | rsmed_count | rscentral_count | 
|--------------|-------------|---------------|-------------|-----------------| 
|   8 |   3 |    4 |   1 |    0 | 

SELECT 
    SUM(counts.rslat_count + counts.rselbow_count + counts.rsmed_count + counts.rscentral_count) as severe_total, 
    counts.rslat_count, 
    counts.rselbow_count, 
    counts.rsmed_count, 
    counts.rscentral_count 
FROM (
    SELECT 
     SUM(rslat = 'severe') as rslat_count, 
     SUM(rselbow = 'severe') as rselbow_count, 
     SUM(rsmed = 'severe') as rsmed_count, 
     SUM(rscentral = 'severe') as rscentral_count 
    FROM forearm 
    WHERE business='zmon' 
) AS counts 

結果は深刻な総

$sentence = 'There are %d employees severe in %s'; 
while ($row = mysql_fetch_assoc($result)) { 
    printf($sentence, $row['rslat_count'], 'rslat'); 
    printf($sentence, $row['rselbow_count'], 'rselbow'); 
    printf($sentence, $row['rsmed_count'], 'rsmed'); 
    printf($sentence, $row['rscentral_count'], 'rscentral'); 
    echo 'business in ' . $row['severe_total'] . ' severe conditions'; 
} 
+0

すべてのステータスの数を取得する場合は、別のクエリを使用することもできます。 – fyrye

+0

ありがとうございます。私の質問が不完全に表明されたことに気付きました。私はテーブルの前腕のseveresの数を合計する必要があります。 – Paul

+0

@Paulシンプルな調整 - 更新されましたが、個々の列をPHPで合計して合計を表示することもできます。 – fyrye

1

これを試してみてください:

<?php 

$host="localhost"; 
$username="user"; 
$password="pass"; 
$db_name="dbase"; 

$conn = mysql_connect("$host", "$username", "$password")or die("cannot connect"); 

mysql_select_db("$db_name")or die("cannot select DB"); 

$query = "SELECT COUNT(*) FROM forearm WHERE business='zmon' AND rsmed = 'severe' "; 

$result = mysqli_query($conn,$query); 

if($result){ 

    // Return the number of rows in result set 

    $rowcount=mysqli_num_rows($result); 

    printf("Result set has %d rows.\n",$rowcount); 
    // Free result set 

    mysqli_free_result($result); 
    } 

mysqli_close($conn); 


?> 
+0

はありがとうござい表示します。これはエラーを投げた。私はそれが混乱のmsql/msqli部門にあると思います。乾杯、ポール – Paul

2

あなたが別の列に(rslat、rsmed、rscentral、rselbow)どのように多くの 'severes' 数えている場合は、あなたのクエリを変更してみてください

SELECT COUNT(*) AS employee_count, "rsmed" AS rtype 
FROM forearm WHERE business='zmon' AND rsmed = 'severe' 
UNION 
SELECT COUNT(*) AS employee_count, "rslat" AS rtype 
FROM forearm WHERE business='zmon' AND rslat = 'severe' 
UNION 
SELECT COUNT(*) AS employee_count, "rscentral" AS rtype 
FROM forearm WHERE business='zmon' AND rscentral = 'severe' 
UNION 
SELECT COUNT(*) AS employee_count, "rselbow" AS rtype 
FROM forearm WHERE business='zmon' AND rselbow = 'severe' 

その後、あなたは今、このようなあなたのループを書くことができます:このような何かに

while($row = mysql_fetch_array($result)) 
{ 
    echo "There are {$row['employee_count']} employees severe in {$row['rtype']}."; 
} 
+0

ありがとう、これはうまく動作します。 Wonderful ... Paul – Paul

関連する問題