如何检查另一个表的最后n行中是否存在值?

pexxcrt2  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(297)

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年之外

lnlaulya

lnlaulya1#

您可以使用连接:

$check = mysqli_query($db, 'SELECT u.id
FROM used AS u
JOIN (
   SELECT id
   FROM used
  ORDER BY id DESC LIMIT 10) AS ub
USING (id)
WHERE item = ' . $id);
wpcxdonn

wpcxdonn2#

听起来你想检查一下 $id 在最后10项中 used table。此查询应执行以下操作:

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

此查询将返回 1 如果 $id 不在的最后10个值中 itemused 表,或 0 否则。
对于不支持 LIMITIN 子查询,可以使用 LEFT JOIN 与此查询一样,它将返回相同的结果:

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
krcsximq

krcsximq3#

如果您的版本不支持“limit&in/all/any/some子查询”:

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

相关问题