Frage

hi, ich habe Probleme mit diesem SQL.Grundsätzlich zeigt es Status an, die meine Freunde veröffentlicht haben, und filtert die Freunde, die ich blockiert habe.

Der SQL ist SLOOOOOOWWWWWW, dauert zwar 2 Sekunden, um es zu verarbeiten.Was scheint das Problem zu sein.(Ich habe die Tabellen und einige Beispiele aufgelistet, wie es unter den SQL aussieht) Vielen Dank im Voraus! Die SQL .... generasacodicetagpre.

(Tabellenname: Blockliste) generasacodicetagpre.

(Tabellenname: Freundschaft) generasacodicetagpre.

(Tabellenname: Benutzer) generasacodicetagpre.

die Wandtabelle generasacodicetagpre.

danke !!!

War es hilfreich?

Lösung

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)...

Andere Tipps

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top