Los loggings de visualización de SQL coinciden primero con la tabla de búsqueda y luego con todos los demás loggings

Imagina que es un sitio de música y tengo 1000 canciones. Los usuarios pueden "preferir" canciones, esto se almacena en una tabla de búsqueda utilizando memberID y songID.

Luego quiero mostrar los favoritos para un usuario específico en la parte superior de una list de todas las canciones.

SELECT s.*, s.songID theSongID, f.* FROM su_songs AS s left JOIN su_member_favourites_lookup AS f ON f.songID = s.songID ORDER by f.songID IS NULL, s.songTitle ASC 

… funciona para mostrar todos los favoritos en la parte superior. Pero solo quiero mostrar los favoritos del usuario conectado y luego todas las otras canciones debajo

 SELECT s.*, s.songID theSongID, f.* FROM su_songs AS s left JOIN su_member_favourites_lookup AS f ON f.songID = s.songID WHERE memberID = " . $memberID . " ORDER by f.songID IS NULL, s.songTitle ASC 

… si agrego la cláusula WHERE para que coincida con el usuario, solo muestra los favoritos del usuario y omite el rest de las canciones.

La solución es usar AND en lugar de WHERE

 SELECT s.*, s.songID theSongID, f.* FROM su_songs AS s LEFT JOIN su_member_favourites_lookup AS f ON f.songID = s.songID AND f.memberID = " . $memberID . " ORDER by f.songID IS NULL, s.songTitle ASC 

Esto comenzó como una pregunta real y luego pensé en lo que podría funcionar … y así fue. Espero que esto ayude a alguien más.