php - 如何检查另一个表的最后 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 个之外,也会始终返回
解决方案
听起来您想检查该项目$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
,则此查询将返回used
,0
否则返回。
对于不支持子查询的 MySQL 版本,您可以LIMIT
在此查询中IN
使用LEFT JOIN
as ,这将返回相同的结果:
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