درخواست کوئری
سلام
من 2 تا table دارم با نام های users و friends
حالا چطوری میتونم یوزر هایی رو پیدا کنم که یوزر شماره 1 باهاشون دوست نیست.
البته کوئری زیر جواب کار رو میده:
SELECT user_id, name FROM USERS WHERE user_id NOT IN (SELECT friend_id FROM FRIENDS WHERE user_id = 1)
ولی میخوام از join استفاده کنم
خروجی آخر میشه شبیه این:
user_id: 3 James 4 Joe 5 Max
5 پاسخ
من جواب ها رو چک میکنم اینجا میزارم.دیتا فرضی درست می کنم بعد جواب رو حتما چک می کنم.یعنی به دونسته هام 100% اطمینان هم نمی کنم.
مشکلش کجا بود؟
مشکل کوئری شما این بود که فقط کسانی رو میاره که توی تیبل friend موجود باشن.
ممکن که همه یوز ها توی تیبل friend موجود نباشن(اصلا با کسی دوست نباشن)
و مشکل دیگش هم این بود که هرچقدر که توی تیبل friend یوزر تکراری باشن رو میاره
این خروجی کوئری شماست، مثال:( یوزر 14 یه بار با یوزر 3 دوست شده و یک بار با یوزر 5) بنابراین 2 بار اسمش در این ستون ثبت شده و دوبارش رو میاره
در کل با کوئری که در بالا فرستادم به جواب رسیدم و از روی اون میتونید ببینید منظورم دقیقا چیه.
اون کوئری جواب رو بهم داد و حالا میخوام به صورت رندم ازش بگیرم، باید چیکار کنم؟ بدون ORDER BY RAND()
select USERS.user_id from USERS left outer join FRIENDS on USERS.user_id = FRIENDS.user_id where FRIENDS.user_id <> 1
آقا ممنون از جوابت
کوئری شما درست کار نکرد
با کوئری زیر تونستم به جواب برسم
SELECT u.user_id, u.user_name FROM users u LEFT JOIN friend f ON ( f.friend_id = u.user_id AND f.user_id=1) WHERE f.user_id IS NULL OR f.friend_id IS NULL LIMIT 5
حالا میخوام 5 تا ردیف رو به صورت رندم از تیبل users بگیره، توی همین کوئری
ORDER BY RAND() جواب میده ولی نمیخوام از این استفاده کنم، راه دیگه ای سراغ دارید؟
از اینکه نتونستم جواب درستی ارسال کنم پوزش می طلبم.تو دیتاهای فرضی همه شرایط رو در نظر نگرفتم