MySQL Matching Columns from Same Table
===

Ok a little primer; I'm an expert PHP/JS/C developer but have never quite been able to get a comprehensive grasp on MySQL.  It would be great if you could answer my question, but just as helpful if you could point me in the direction of *good* resources to learn about complex MySQL query do's and don'ts (mostly from an efficiency standpoint).

**Objective**

I need to find similarities/overlaps in a single table while still pulling the entire result set (to LEFT JOIN with the actual title/description content which is in another table).

The table is extremely simple; it contains 3 columns (`page`, `user`, `time`).

Essentially each query will have two users.  I need to pull the count of all results matching `User 1`, the count of all results matching `User 2`, and ALL columns (plus LEFT JOIN) for overlap (where both `User 1` and `User 2` have a match in the table.

**Sample Query**

This query works, but it's extremely slow (to the point where it takes minutes to run) and I'm guessing inefficient due to the subqueries.  If any SQL experts can point out a more efficient way to do this (and why) it would be MUCH appreciated.

    SELECT DISTINCT `page`, 
	    (SELECT COUNT(*) FROM `m_likes` WHERE `user` = "1") AS userLikes,
		(SELECT COUNT(*) FROM `m_likes` WHERE `user` = "2") AS friendLikes
												
		FROM `m_likes` AS like LEFT JOIN `app_pages` AS page ON (page.id = like.page)
												
			WHERE like.`page` IN (SELECT `page` FROM `m_likes` WHERE `user` = "1") 
			AND like.`page` IN (SELECT `page` FROM `m_likes` WHERE `user` = "2")
												
			AND (like.`user` = "1" OR like.`user` = "2")