php - 如何限制MySQL中的id?

标签 php mysql

我正在尝试从数据库中获取最后修改的行,现在我的结果如下:

我的 table :

My table:

id   fort_id     Last modified
------------------------------
 1       1               today
 2       1           yesterday
 3       2               today
 4       2           yesterday
 5       2   day be4 yesterday
 6       3               today
------------------------------

我想获取这样的信息:

id   fort_id     Last modified
------------------------------
 1       1               today
 3       2               today
 6       3               today
------------------------------

现在这就是我的代码:

    $sql = "SELECT f.id, f.lat, f.lon, f.name, f.url, s.fort_id, s.team, s.last_modified, s.slots_available
        FROM forts AS f
        LEFT JOIN fort_sightings AS s ON f.id=s.fort_id
        ORDER BY s.last_modified DESC";
$result = $mysqli->query($sql);

while($row = $result->fetch_assoc()) {
    $sql_defender = "SELECT pokemon_id, owner_name, cp
        FROM gym_defenders
        WHERE fort_id = " . $row['id'] . "
        ORDER BY cp DESC";
    $result_defender = $mysqli->query($sql_defender);

    $encode_defender = [];
    while($defender = $result_defender->fetch_assoc()) {
        $encode_defender[] = array("mon_cp" => $defender['cp'],
        "mon_owner" => $defender['owner_name'],
        "mon_id" => $defender['pokemon_id']);
    }

    $url = preg_replace("/^http:/i", "https:", $row['url']);

    if($row['team'] == 1){ $team = "mystic";}
    if($row['team'] == 2){ $team = "valor";}
    if($row['team'] == 3){ $team = "instinct";}

    $encode[] = array("id" => $row['id'],
        "name" => $row['name'],
        "image" => $url,
        "team" => $team,
        "modified" => $row['last_modified'],
        "spots" => $row['slots_available'],
        "lat" => $row['lat'],
        "lng" => $row['lon'],
        "defenders" => $encode_defender);
}

echo json_encode($encode, JSON_NUMERIC_CHECK);

这段代码应该是这样的,每次都应该选择 1 个 fort_id 和最新的 last_modified 。

最佳答案

您需要使用 GROUP BY 即

$sql = "SELECT f.id, s.fort_id, s.last_modified
        FROM forts AS f LEFT JOIN fort_sightings AS s ON f.id=s.fort_id
        GROUP BY s.fort_id
        ORDER BY s.last_modified DESC";
$result = $mysqli->query($sql);

关于php - 如何限制MySQL中的id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46136247/

相关文章:

php - 这是 jquery.ajax() 中的有效 url 参数吗?

PHP 无法使用 mkdir 创建目录

php - opencart 2.x 中产品页面的自定义 SEO URL

mysql - 如何只更新 DB2 中的一条记录?

php - 从数组构建插入查询

mysql - 注释代码: 1973 Can't create user 'user' @'localhost' ; it already exists, Mysql

php 查询连接表

php - 在PHP中使用正则表达式匹配同一个句子中相同的单词组合

mysql - MYSQL函数和GROUP_CONCAT的问题

php - jqGrid。如何在编辑模式下根据行中的当前值更改下拉列表的列表?