Php / mysql: Проверьте, принадлежит ли что-то «-то» что-то еще?
-
02-10-2019 - |
Вопрос
У меня есть две столы: магазины и предметы. Отношения: магазины 1 --- * предметы
В PHP / Mysql каково было бы лучшим (быстрым / простым) способом проверки, принадлежит ли конкретный элемент для конкретного магазина.
Другими словами, данными, например:
$store_id = 1;
$item_id = 12;
Я хочу проверить, принадлежит ли элемент 12 для хранения 1 (а не в одном другом магазине).
Я обычно делаю выбор на элементах, сопоставляющих как Store_id, так и item_id, и ограничивает результаты 1. Затем проверьте, сколько строк (0 или 1) были возвращены с помощью mysql_num_rows. Есть ли способ лучше?
Обновлять:
Обе таблицы имеют столбца «ID». Таблица элементов имеет столбец «Store_id».
Решение
SELECT COUNT(*) AS count
FROM stores JOIN items USING(store_id)
WHERE item_id = 12
AND store_id = 1
Тогда вы получите результаты и проверьте count > 0
или не. Однако, если я получаю ваш дизайн БД справа, у вас очень запутанная база данных.
Из того, что вы описываете, предмет может существовать только в одном магазине. Так что мое предположение о общей макете здесь было бы так:
STORE ITEM
----- ----
store_id ---| item_id
store_name |--- store_id
... item_name
...
Это верно? Элемент никогда не может существовать, кроме одного магазина? Так что если это отвертка, каждый магазин понадобится другой item_id
держать это?
Лучший дизайн будет:
STORE STORE_ITEM ITEM
----- ---------- ----
store_id ------- store_id |------ item_id
store_name item_id ---| item_name
... ...
С запросом
SELECT COUNT(*)
FROM store JOIN store_item USING(store_id)
JOIN item USING(item_id)
WHERE store_id = 1
AND item_id = 12
Другие советы
Обе таблицы имеют идентификатор, элементы имеют Store_id
SELECT COUNT(*) FROM Items WHERE store_id = $store_id AND id = $item_id
$r = mysql_query("select NULL from Item where storeID = '$store_id' and ItemID = '$item_id'");
if (mysql_fetch_row($r))
{
it belongs...
}
Для удовольствия я добавлю в одноклассную проверку:
// if item belongs to store
if (current(mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM Items WHERE store_id = $store_id AND id = $item_id"), MYSQL_NUM)))) {
// it belongs!
}