ما هي طرق الحصول على أصدقاء مشتركين في (1, 2) (2, 1) سيناريو الصداقة?
-
12-12-2019 - |
سؤال
أنا تطوير موقع على شبكة الانترنت حيث عندما يضيف شخص شخص آخر كصديق, 2 يتم إنشاء إدخالات.دعنا نقول uid 1
يضيف uid 2
كصديق ، يتم إنشاء الصفوف التالية في الخلية.
activity_id uid1 uid2
1 1 2
2 2 1
uid 2
يصبح أصدقاء مع uid 3
:
activity_id uid1 uid2
1 1 2
2 2 1
3 2 3
4 3 2
ما هي الطرق للحصول على أصدقاء مشتركون بين uid 1
و uid 2
?أنا باستخدام فب و ميسكل مع أي خبرة بدو (في الوقت الراهن).
[عدل] حسنا ، لذلك قررت تنظيم / تطبيع الجداول.العلاقة يولد فقط 1 صف الآن.مما يجعل الجدول:
activity_id uid1 uid2
1 1 2
2 2 3
نصائح أخرى
على افتراض كنت قد دعا الجدول الخاص بك 'الأصدقاء'.
سيجد هذا الاستعلام أصدقاء مشتركين للمستخدمين 1 و 3.
SELECT a.uid2
FROM friends a
INNER JOIN friends b
ON a.uid2 = b.uid2
WHERE a.uid1 = 1
AND b.uid1 = 3
لا تظن أنه قد يكون قليلا الافتراض لجعل 2 الصفوف على الرغم من?ربما إيد 2 لا يحب حقا إيد 1 ?(أوتي).
للعثور على جميع الأصدقاء المشتركين uid 1
و uid 2
:
SELECT t1.uid2
FROM tbl t1
JOIN tbl t2 USING (uid2)
WHERE t1.uid1 = 1
AND t2.uid1 = 2;
هناك حالة خاصة واحدة, على أية حال:لا يظهر هذا الاستعلام ما إذا كان 1
& 2
هم أصدقاء!
راجع للشغل ، يبدو التصميم الخاص بك زائدة عن الحاجة قليلا.يجب أن تعمل مع إدخال واحد فقط لكل صداقة.(هذا الاستعلام يجب أن تتكيف مع ذلك ، على الرغم من.)
أساسا هذا هو حالة أخرى من التقسيم العلائقي.هناك العديد من الطرق المختلفة لجلد هذه القطة. البحث تماما تحت هذا السؤال ذات الصلة - بما في ذلك اختبار الأداء ومزيد من المعلومات.
الاستعلام عن سؤال محدث
الآن هناك فقط 1 صف لكل صداقة-يمكن للمستخدم أن يطفو على السطح في أي عمود:
SELECT uid
FROM (
SELECT uid2 AS uid FROM tbl WHERE uid1 = 1
UNION ALL
SELECT uid1 FROM tbl WHERE uid2 = 1
) u1
JOIN (
SELECT uid2 AS uid FROM tbl WHERE uid1 = 2
UNION ALL
SELECT uid1 FROM tbl WHERE uid2 = 2
) u2 USING (uid)
$query="SELECT distinct(uid2) FROM `test` where uid1=$uid union select distinct(uid1) from test where uid2=$uid";