PHP / MySQL: bir şey başka bir şey '-ait' olmadığını kontrol edin?

3 Cevap php

Mağazalar ve Öğeleri: İki tablo var. Ilişki: Mağazalar 1 --- * Öğeler

PHP / MySQL ne belirli bir öğe belirli bir mağazaya ait olmadığını denetlemek için (hızlı / kolay) en iyi yolu olacaktır.

, Örnek olarak, başka bir deyişle:

$store_id = 1;
$item_id = 12;

I Madde 12 1. (ve diğer bazı mağaza) depolamak ait olmadığını kontrol etmek istiyorum.

Ben genellikle store_id ve item_id hem eşleşen öğeler üzerinde bir seçme yapmak ve 1 sonuçlarını sınırlandırmak. Kaç satır (0 veya 1) mysql_num_rows ile getirildiler Sonra kontrol edin. Daha iyi bir yolu var mı?

Update:

Her iki tablo bir "id" sütunu var. Öğeleri tablo "store_id" sütunu vardır.

3 Cevap

SELECT COUNT(*) AS count
FROM stores JOIN items USING(store_id)
WHERE item_id = 12
  AND store_id = 1

Sonra sonuç almak, ve count > 0 veya değil kontrol ediyorum. Ben senin DB tasarım hakkı alıyorum Ancak, o zaman çok berbat bir veritabanı var.

Eğer tarif kadarıyla, bir öğe yalnızca tek bir mağazada bulunabilir. Yani burada genel düzen benim tahminim bu gibi olacaktır:

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

Bu doğru mudur? Bir öğe bir mağaza dışında var olamaz? Yani bir tornavida ise, her mağaza farklı bir item_id tutun gerekir?

Daha iyi bir tasarım olacaktır:

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

Bir sorguda ile

SELECT COUNT(*)
FROM store JOIN store_item USING(store_id)
     JOIN item USING(item_id)
WHERE store_id = 1
  AND item_id = 12

Her iki tablo bir kimliği var, Öğeleri bir store_id var

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

Eğlence için, ben bir tek-liner kontrol atarım:

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