used
содержит список использованных предметов. Я не хочу, чтобы этот предмет снова использовался, если он был одним из последних 10 использованных предметов.
Из некоторого поиска в Google кажется, что мне нужен подзапрос, но я не могу заставить его работать. Вот что я пробовал до сих пор
$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
как в этом запросе, который вернет тот же результат:
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
Вы можете сделать это с помощью JOIN:
$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);
Это работает, если ваша версия не поддерживает LIMIT & IN / ALL / ANY / SOME subquery «:
$check = mysqli_query($db, 'SELECT `item` FROM
(SELECT `item`
FROM `used`
ORDER BY `id` DESC
LIMIT 10) as useditems
WHERE `item` = ' . $id );