سؤال

مرحبا، هل تواجه مشكلة في هذا SQL.في الأساس يعرض الأحكام التي نشرها أصدقائي، وتصفية الأصدقاء الذين منعتهم.

SQL هو sloooowwwwwwwwwwwwwwwwn .. يستغرق 2 ثوان لمعالجة ذلك.ما الذى يبدو انه مشكله.(إيف أدرج الجداول وبعض الأمثلة على كيفية أن تنظر إلى SQL) شكرا مقدما! SQL .... giveacodicetagpre.

(اسم الجدول: Blocklist) giveacodicetagpre.

(اسم الجدول: صداقة) giveacodicetagpre.

(اسم الجدول: المستخدمون) giveacodicetagpre.

الجدول الجدول giveacodicetagpre.

شكرا !!!

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

المحلول

NOT IN is used for fixed values, use NOT EXISTS instead :

SELECT from_user_id,content,wall.date, wall.wall_type, users.id, users.displayname 
            FROM wall

            INNER JOIN friendship ON ( wall.from_user_id =friendship.user_a OR wall.from_user_id = friendship.user_b ) 
            INNER JOIN users ON (wall.from_user_id = users.id)
WHERE not exists (select * from blocklist where users.id = blocked_id AND user_id = 1) and wall.wall_type IN ('home', 'profile', 'topro') AND (
                  (friendship.user_a = 1 and friendship.user_b = wall.from_user_id)
                or  
                    (friendship.user_a = wall.from_user_id and friendship.user_b = 1)    or (wall.user_id_of_wall = 1 or type_id = 1 or from_user_id = 1))
GROUP BY wall_id
ORDER BY date DESC LIMIT 10 

[EDIT] Use IN for fixed values (wall_type)...

نصائح أخرى

always use WITH (NOLOCK) on read-only queries!

also, please remove all your paranthesis on your JOIN clause, did you copy and paste this from MS Access?

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top