私が正しく理解していれば、これで必要なことができるはずです:
$result = mysql_query("SELECT (specName, (IF EXISTS (SELECT * FROM user_specialty us WHERE s.id = us.sid AND us.uid = '$id' LIMIT 1))) FROM specialities s;");
while (list($spec, $checked) = mysql_fetch_array($result)) {
// Do your outputting here.
}
編集
ご要望に応じて、質問について説明します。おそらくあなたを混乱させる部分は、このサブクエリです:
(IF EXISTS (SELECT * FROM user_specialty us WHERE s.id = us.sid AND us.uid = '$id' LIMIT 1))
IF EXISTS
直後の部分が「存在する」(結果を含む)場合、MySQLにTRUEまたはFALSEを返すように指示します。 SELECT * FROM user_specialty us WHERE s.id = us.sid AND us.uid = '$id' LIMIT 1
user_specialty
で行を検索するようにMySQLに指示するだけです ここで、s.id = us.sid
(特殊IDが一致します)およびus.uid = '$id'
(IDはユーザーのものです。)