How can I speed up an sql query that round trips between two tables
From my (rather limited) knowledge of php, I assume you want to combine the two queries into one:

SELECT m.*, p.frequency 
FROM 
  ( SELECT sid, COUNT(*) as frequency
    FROM plays
    WHERE time &gt; NOW() - INTERVAL 3 DAY 
      AND sid &lt;&gt; '' 
    GROUP BY sid
    ORDER BY COUNT(*) DESC
    LIMIT 50 
  ) AS p
  JOIN music AS m
    ON m.sid = p.sid
WHERE m.perms &lt;&gt; 'c' 
ORDER BY m.frequency DESC ;


As for efficiency, it's better to tune the first query separately and then this combined one. 

An index on plays (sid, time) should help for the first query. For the second, if there is an index on music (sid), it should be quite efficient as it's a join to only 50 rows of music.