PHP / MySQL:检查某些东西是否属于“其他”东西?

时间:2010-04-29 21:00:43

标签: php mysql belongs-to

我有两个表:商店和商品。关系是:商店1 --- *项目

在PHP / MySQL中,检查特定商品是否属于特定商店的最佳(最快/最简单)方式。

换句话说,例如:

$store_id = 1;
$item_id = 12;

我想检查商品12是否属于商店1(而不是其他商店)。

我通常选择匹配store_id和item_id的项目,并将结果限制为1.然后检查mysql_num_rows返回的行数(0或1)。还有更好的方法吗?

更新

两个表都有一个“id”列。 Items表有一个“store_id”列。

4 个答案:

答案 0 :(得分:2)

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 :(得分:1)

  

两个表都有一个id,Items有一个store_id

SELECT COUNT(*) FROM Items WHERE store_id = $store_id AND id = $item_id

答案 2 :(得分:0)

$r = mysql_query("select NULL from Item where storeID = '$store_id' and ItemID = '$item_id'");

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

答案 3 :(得分:0)

为了好玩,我会进行单行检查:

// 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!
}