PHP / MySQL: проверить, принадлежит ли что-то другому? - PullRequest
0 голосов
/ 30 апреля 2010

У меня есть две таблицы: магазины и предметы. Отношения: магазины 1 --- * предметы

В PHP / MySQL, какой будет лучший (самый быстрый / простой) способ проверить, принадлежит ли конкретный товар к определенному магазину.

Другими словами, например:

$store_id = 1;
$item_id = 12;

Я хочу проверить, принадлежит ли пункт 12 к магазину 1 (а не к какому-либо другому магазину).

Я обычно делаю выбор элементов, соответствующих как store_id, так и item_id, и ограничиваю результаты до 1. Затем проверяю, сколько строк (0 или 1) было возвращено с помощью mysql_num_rows. Есть ли лучший способ?

Обновление:

Обе таблицы имеют столбец "id". Таблица Items имеет столбец store_id.

Ответы [ 4 ]

2 голосов
/ 30 апреля 2010
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
1 голос
/ 30 апреля 2010

У обеих таблиц есть идентификатор, у Item есть store_id

SELECT COUNT(*) FROM Items WHERE store_id = $store_id AND id = $item_id
0 голосов
/ 30 апреля 2010

Ради интереса я добавлю однострочную проверку:

// 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!
}
0 голосов
/ 30 апреля 2010
$r = mysql_query("select NULL from Item where storeID = '$store_id' and ItemID = '$item_id'");

if (mysql_fetch_row($r))
{
    it belongs...
}
...