Я создаю корзину для покупок, и у меня возникает одна проблема: когда кто-то заказывает элемент, мне нужно скрыть этот элемент из напечатанных списков элементов базы данных MySQL (хранится в таблице items
), если это элемент уже куплен. (Другие пользователи не могут добавить эти товары в корзину, если кто-то уже сделал это раньше и купил.) Купленные предметы хранятся в другой таблице MySQL orders
. Так что как-то нужно сравнить эти две таблицы и фильтровать эти элементы из списка товаров, которые заказываются. Какие-нибудь советы?Сравните две таблицы БД и скройте существующие элементы
ответ
Вы могли бы сделать что-то вроде этого:
SELECT * FROM items WHERE item_id NOT IN (SELECT item_id FROM orders);
ответ травести, используя подзапрос хорошо. Другим способом будет использование соединения:
SELECT items.* FROM items
LEFT OUTER JOIN orders
ON items.item_id = orders.item_id
WHERE orders.item_id IS NULL -- only those which had no join
Возможно, вам потребуется пересмотреть структуру. Способ структурирования систем инвентаризации заключается в том, что существует таблица элементов, в которой есть столбец количества (типа int). Этот столбец должен содержать количество доступных ресурсов. Затем вы должны заполнить этот номер, чтобы он соответствовал вашему инвентарю. Если кто-то покупает этот товар, вы должны вычесть сумму, которую они купили. Таким образом, вам не нужно создавать новую строку для каждого предмета, который у вас есть на складе. В пользовательском интерфейсе вы должны отобразить инвентарь, который у вас есть на складе. (Элементы, где количество столбцов больше 0)
Я согласен с этим. Это гораздо более гибко, поэтому вам не нужно иметь две записи в таблице 'items' только потому, что у вас есть два одинаковых точных элемента. – Travesty3