php/mysql:何か他のものに「属している」かどうかを確認しますか?

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

  •  02-10-2019
  •  | 
  •  

質問

ストアとアイテムの2つのテーブルがあります。関係は次のとおりです。ストア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 か否か。ただし、DBデザインを正しく取得している場合は、非常に台無しになっているデータベースがあります。

あなたが説明するものから、アイテムは1つの店にしか存在しません。したがって、ここでの一般的なレイアウトの私の推測は次のようになるでしょう:

STORE            ITEM
-----            ----
store_id ---|    item_id
store_name  |--- store_id
...              item_name
                 ...

これは正しいです? 1つのストアを除いてアイテムは存在できませんか?したがって、それがドライバーの場合、すべてのストアが別のものが必要になります 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