1

私はテーブル名がadsそのようなものを持っています:

    id    ad_country          ad_gender     ad_birthday
     1     05                       01              2012-02-26
     2     15                       02              2011-05-29
     3     78                       02              2010-04-12

そしてそのようなテーブルfield_values

 fieldid    fieldtitle  fieldvalue
   14         Male         01                // ads.ad_gender =  field_values.fieldvalue
   14         Female       02                //ads.ad_country =  field_values.fieldvalue
   13         Afghanistan  03 
   13         Albania      04
   13           Algeria    05
  ...             ...                ... 

とコード:

        session_start();
    if (isset($_POST['country'])){

         $country = $_POST['country']; 
        $_SESSION['country'] = $_POST['country'];
            }
    if (isset($_POST['year'])){
       $year = $_POST['year']; 
       $_SESSION['year'] = $_POST['year'];
       }

と私は2つのドロップダウン選択オプションがあります

1つは、国のオプションを選択することです。

 <form action="" id="countryform" method="post">
   <select id="country" name ="country" size="1" class="select" onchange="this.form.submit();;" >
       <option value="0" >Please Select a Country</option>

              <?php 
    $sql = mysql_query ("SELECT * FROM field_values WHERE fieldid = 13 GROUP BY fieldtitle ");
            while ($row = mysql_fetch_array($sql) ){  
            ?>

       <option value="<?php echo $row['fieldtitle'] ;?>" <?php

           if ($country == $row['fieldtitle']) { echo " selected='selected'"; } ?> > <?php echo $row['fieldtitle'] ;?>
      </option>
             <?php } ?>
   </select>
    <input type="hidden" name="hiddenselect" value="<?php echo $country;  ?>" />
 </form> 

1つは、年のオプションを選択することです。

<form action="" id="yearform" method="post">
  <select id="year" name ="year" size="1" class="select" onchange="this.form.submit();;" >
       <option value="0" >Please Select the Year</option>

<?php 
 $sql6 = mysql_query("SELECT  ad_birthday,(substr(ad_birthday , 1, 4)) AS year FROM ads GROUP BY year ") ;
while ($row6 = mysql_fetch_array($sql6) ){
   ?>

  <option value="<?php echo $row6['year'] ;?>" <?php

    if ($year == $row6['year']) { echo " selected='selected'"; } ?> > <?php echo $row6['year'] ;?>
  </option>
   <?php } ?>
  </select>
  <input type="hidden" name="hiddenselect" value="<?php echo $year;  ?>" />
</form> 

エコー部分は次のとおりです。

         $sql2 = mysql_query("SELECT COUNT(ad_gender) AS male FROM ads INNER JOIN  field_values ON  field_values.fieldvalue = ads.ad_country WHERE '".$_POST['country']."' = field_values.fieldtitle AND ad_gender = 01  ");
           $row2 = mysql_fetch_array($sql2) ; 
        $sql3 = mysql_query("SELECT COUNT(ad_gender) AS female FROM ads INNER JOIN  field_values ON  field_values.fieldvalue = ads.ad_country WHERE '".$_POST['country']."' = field_values.fieldtitle AND ad_gender = 02  ");
           $row3 = mysql_fetch_array($sql3) ; 

          echo "There are ".$row2['male']." male <br />";
          echo "There are ".$row3['female']." female<br />";

しかし、私はそれを回避することができませんでした、私はissetステートメントの場合に何かが欠けていると思います。

私が欲しいのは:

国と年を選択すると、この国と今年までに男性と女性の数が反映されます。あなたの時間のためのthx

4

1 に答える 1

2
SELECT c.gender, COUNT(*) AS 'count'
FROM ads a 
INNER JOIN 
    (SELECT fieldvalue, fieldtitle AS country FROM field_values) b 
        ON b.fieldvalue = a.ad_country
INNER JOIN
    (SELECT fieldvalue, fieldtitle AS gender FROM field_values) c
        ON c.fieldvalue = a.ad_gender
GROUP BY c.gender

前に次のフィルターを追加できますGROUP BY

  • 年:WHERE YEAR(a.ad_birthday) = '2012'
  • 国:WHERE b.country = 'Albania'

実際の動作をご覧ください。

次に、mysql_関数をmysqli_またはに変換した後PDO非推奨になっているため)、性別ごとに結果を表示できます。

| ジェンダー| COUNT |
------------------
| 女性| 2 |
| 男性| 1 |

アップデート1

このコードを実装するには、次のようなものを試すことができます(テストされていません)。

$link = mysqli_connect("localhost", "user_name", "password", "stock");

if (mysqli_connect_error()) {
die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
}

$stmt = mysqli_prepare($link, "SELECT c.gender, COUNT(*) AS 'count' FROM ads a 
INNER JOIN (SELECT fieldvalue, fieldtitle AS country FROM field_values) b ON b.fieldvalue = a.ad_country
INNER JOIN (SELECT fieldvalue, fieldtitle AS gender FROM field_values) c ON c.fieldvalue = a.ad_gender
WHERE b.country = ? AND (YEAR(a.ad_birthday) = ? OR YEAR(a.ad_birthday) <> NULL) GROUP BY c.gender");

mysqli_bind_param($stmt, 'ss', $country, $year) or die(mysqli_error($dbh));

$result = mysqli_stmt_execute($stmt) or die(mysqli_error($link));

while($row = mysqli_fetch_assoc($result)) {
echo "There are " . $row[count] . ' ' . $row[gender] . "<br />\n";
}

mysqli_close($link);

アップデート2

mysqliなんらかの理由で使用できないため、以下のコードで動作するはずです。国が空ではないことを前提としていることに注意してください。

$query = "SELECT c.gender, COUNT(*) AS 'count' FROM ads a 
    INNER JOIN (SELECT fieldvalue, fieldtitle AS country FROM field_values) b ON b.fieldvalue = a.ad_country
    INNER JOIN (SELECT fieldvalue, fieldtitle AS gender FROM field_values) c ON c.fieldvalue = a.ad_gender
    WHERE b.country = " . mysql_real_escape_string($country);

if(isset($year)) $query .= " AND YEAR(a.ad_birthday) = " . mysql_real_escape_string($year);

$query .= ' GROUP BY c.gender';

$sql2 = mysql_query($query);
while($row = mysql_fetch_assoc($sql2)) {
    echo "There are " . $row[count] . ' ' . $row[gender] . "<br />\n";
}
于 2012-09-12T19:26:05.967 に答える