sql >> データベース >  >> RDS >> Mysql

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非推奨 であるため )、性別ごとに結果を表示するだけです:

    | GENDER | COUNT |
    ------------------
    | Female |     2 |
    |   Male |     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";
    }
    



    1. DockerMYSQL'[2002]接続が拒否されました'

    2. mysqlにDateTimeをユリウス日数に出力させるにはどうすればよいですか?

    3. PostgreSQLでEXCLUDEを使用して隣接/重複するエントリを防止する

    4. OracleTO_DATEが機能しない