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

在PHP/MySQL中,最好(最快/最简单)检查特定项目是否属于特定商店的方法是什么。

换句话说,例如:

$store_id = 1;
$item_id = 12;

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

我通常对匹配store_id和item_id的项目进行选择,然后将结果限制为1。然后检查使用mySQL_NUM_ROWS返回多少行(0或1)。有没有更好的办法?

更新:

两张表都有一个“ 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

其他提示

两张表都有一个ID,项目都有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