Php / mysql: Проверьте, принадлежит ли что-то «-то» что-то еще?

StackOverflow https://stackoverflow.com/questions/2740747

  •  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!
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top