如何从两个条件获得最新日期?

时间:2016-12-07 04:57:27

标签: mysql

我已经下拉了下拉列表是namaJabatan

我的桌子 - infojawatan

  1. ID - 表格的PK
  2. namaJabatan - 条件出现的地方($ search - 用户从Dropdown中选择的位置)
  3. tarikhKemaskini - 我想获得行的最新日期
  4. 我的查询

    $sql = "SELECT * FROM infojawatan WHERE namaJabatan = '$search' && tarikh Kemaskini IN (SELECT MAX(tarikhKemaskini) FROM infojawatan GROUP BY ID)";
                                    $sql_rs = mysql_query($sql);
                                    while($row_Sql = mysql_fetch_array($sql_rs)) {
                                        $tarikhKemaskini = $row_Sql['tarikhKemaskini'];
                                    }
                                    echo "Current Date :" .$tarikhKemaskini;
    

1 个答案:

答案 0 :(得分:0)

您的SQL中存在一些语法错误。

  • SQL拼写AND,而不是&&
  • tarikhKemaskini是一个字。
SELECT *
FROM infojawatan
WHERE namaJabatan = :namaJabatan AND
      tarikhKemaskini IN (
          SELECT MAX(tarikhKemaskini)
          FROM infojawatan
          GROUP BY ID
      )

请注意,我在那里使用了:namaJabatan而不是硬编码$search。将硬编码变量导入SQL会使您向SQL Injection Attack开放,恶意攻击者可以在其中创建搜索查询,以便获取比允许的信息更多的信息,甚至可以运行任意SQL查询。

相反,使用参数:namaJabatan,然后在执行查询时传入变量。

不幸的是mysql_query接口不支持此功能。幸运的是it was deprecated并且现在有更好的接口。 Here's a breakdown。我建议使用PDO,因为它是适用于任何SQL数据库的通用接口。然后,您可以使用更安全,更高效的prepared statements with bind parameters

$stmt = $dbh->prepare("
    SELECT *
    FROM infojawatan
    WHERE namaJabatan = :namaJabatan AND
          tarikhKemaskini IN (
              SELECT MAX(tarikhKemaskini)
              FROM infojawatan
              GROUP BY ID
          )
")
$stmt->execute(array( ':namaJabatan' => $search));
while( $row = $stmt->fetch() ) {
    echo $row['tarikhKemaskini'];
}