PHP/MYSQL: تحقق مما إذا كان هناك شيء ما "ينتمي إلى" شيء آخر؟

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

  •  02-10-2019
  •  | 
  •  

سؤال

لدي جدولين: المتاجر والعناصر. العلاقة هي: المتاجر 1 ---* العناصر

في PHP/MySQL ما هو أفضل طريقة (أسرع/أبسط) للتحقق مما إذا كان عنصر معين ينتمي إلى متجر معين.

وبعبارة أخرى معروضة على سبيل المثال:

$store_id = 1;
$item_id = 12;

أريد التحقق مما إذا كان البند 12 ينتمي إلى المتجر 1 (وليس بعض المتاجر الأخرى).

عادةً ما أقوم بعناصر محددة على كل من Store_id و item_id وحد النتائج إلى 1. ثم تحقق من عدد الصفوف (0 أو 1) التي تم إرجاعها باستخدام mysql_num_rows. هل هناك طريقة أفضل؟

تحديث:

كلا الجدولين لهما عمود "معرف". يحتوي جدول العناصر على عمود "store_id".

هل كانت مفيدة؟

المحلول

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

ثم تحصل على النتائج ، وتحقق من count > 0 أم لا. ومع ذلك ، إذا حصلت على تصميم DB الخاص بك بشكل صحيح ، فعندئذ لديك قاعدة بيانات عابث للغاية.

من ما تصفه ، يمكن أن يوجد عنصر فقط في متجر واحد. لذا فإن تخميني بالتخطيط العام هنا سيكون هكذا:

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

نصائح أخرى

يحتوي كلا الجدولين على معرّف ، وعناصر تحتوي على 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