PHP/MYSQL: تحقق مما إذا كان هناك شيء ما "ينتمي إلى" شيء آخر؟
-
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!
}