首页 > 解决方案 > 如何检查另一个表的最后 N 行中是否存在值?

问题描述

used包含已使用项目的列表。如果它是最后使用的 10 个项目之一,我不希望再次使用该项目。

从一些谷歌搜索来看,我似乎需要一个子查询,但无法让它工作。这是我到目前为止尝试过的

$check = mysqli_query($db, 'SELECT `id` 
                            FROM (
                                SELECT `id` 
                                FROM `used` 
                                ORDER BY `id` DESC 
                                LIMIT 10) 
                            WHERE `item` = ' . $id);

在此之前,我使用以下

$check = mysqli_query($db, 'SELECT `id` 
                            FROM `used` 
                            WHERE `item` = ' . $id . ' 
                            ORDER BY `id` DESC 
                            LIMIT 10);

但是,似乎这只是将结果限制为 10,因此true如果使用了某个项目,即使在最后 10 个之外,也会始终返回

标签: phpmysqlsqldatabase

解决方案


听起来您想检查该项目$id是否在表中的最后 10 个项目中used。这个查询应该这样做:

$check = mysqli_query($db, "SELECT $id NOT IN (SELECT item 
                                               FROM used 
                                               ORDER BY id DESC 
                                               LIMIT 10)");

1如果 的值$id不在表中的最后 10 个值中item,则此查询将返回used0否则返回。

对于不支持子查询的 MySQL 版本,您可以LIMIT在此查询中IN使用LEFT JOINas ,这将返回相同的结果:

SELECT IF(b.item IS NULL, 1, 0) 
FROM used a 
LEFT JOIN (SELECT item 
           FROM used 
           ORDER BY id DESC LIMIT 10) b ON b.item = a.item 
WHERE a.item = $id 

推荐阅读