我有两个表:商店和商品。关系是:商店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”列。
答案 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!
}