سؤال

ولدي جدولين أريد أن أشارك.

وأريد من جميع الفئات في جدول الفئات وأيضا كل فئة من الفئات التي اشتركت فيها المستخدم في الجدول category_subscriptions.

وأساسا هذا هو استعلام بلدي حتى الآن:

SELECT *
FROM categories
LEFT JOIN user_category_subscriptions 
     ON user_category_subscriptions.category_id = categories.category_id

وهذا يعمل بشكل جيد لكن أريد أن أضيف جملة WHERE على نهاية الاستعلام الذي ثم أساسا يجعلها الداخلية / متساو الانضمام.

   SELECT *
    FROM categories
    LEFT JOIN user_category_subscriptions 
         ON user_category_subscriptions.category_id = categories.category_id 
   WHERE user_category_subscriptions.user_id = 1

وكيف يمكنني الحصول على جميع الفئات، فضلا عن جميع فئات المشتركين من قبل مستخدم معين باستخدام استعلام واحد فقط؟

وCATEGORY_ID كونه مفتاح في كل جدول الفئات وuser_category_subscriptions. USER_ID المقيمين في الجدول user_category_subscriptions.

وذلك بفضل

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

المحلول

وتحتاج لوضعها في بند join، وليس where:

SELECT *
FROM categories
LEFT JOIN user_category_subscriptions ON 
    user_category_subscriptions.category_id = categories.category_id
    and user_category_subscriptions.user_id =1

وانظر، مع inner join، ووضع بند في join أو where ما يعادل. ومع ذلك، مع outer join، فهي مختلفة إلى حد كبير.

وكشرط join، يمكنك تحديد الصفوف التي سوف يكون الانضمام الى طاولة المفاوضات. وهذا يعني أنه يقيم user_id = 1 أولا، ويأخذ فرعية من user_category_subscriptions مع user_id من 1 للانضمام لكافة الصفوف في categories. هذا وسوف تعطيك كافة الصفوف في categories، في حين فقط categories أن هذا مستخدم معين قد اشتركت في وسوف يكون أي معلومات في الأعمدة user_category_subscriptions. بطبيعة الحال، سوف يتم ملؤها كل categories البعض مع null في الأعمدة user_category_subscriptions.

وعلى العكس من ذلك، شرط where لا للانضمام، و<م> ثم يقلل من الصفوف. لذلك، وهذا يعني كل من ينضم ومن ثم يزيل كافة الصفوف حيث لا user_id لا يساوي 1. كنت تركت مع وسيلة غير فعالة للحصول على inner join.

ونأمل أن يساعد هذا!

نصائح أخرى

وهذه محاولة

  SELECT *
    FROM categories
    LEFT JOIN user_category_subscriptions 
         ON user_category_subscriptions.category_id = categories.category_id 
   WHERE user_category_subscriptions.user_id = 1 
          or user_category_subscriptions.user_id is null
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top