Jeśli dobrze zrozumiałem, powinno to zrobić to, czego potrzebujesz:
$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.
}
Edytuj
Na twoją prośbę przejdę dalej i wyjaśnię zapytanie. Częścią, która prawdopodobnie Cię myli, jest to podzapytanie:
(IF EXISTS (SELECT * FROM user_specialty us WHERE s.id = us.sid AND us.uid = '$id' LIMIT 1))
IF EXISTS
mówi MySQL, aby zwrócił TRUE lub FALSE, jeśli część bezpośrednio po niej 'istnieje' (zawiera wynik). SELECT * FROM user_specialty us WHERE s.id = us.sid AND us.uid = '$id' LIMIT 1
po prostu mówi MySQL, aby znalazł wiersz w user_specialty
gdzie s.id = us.sid
(dopasowany identyfikator specjalizacji) i us.uid = '$id'
(identyfikator należy do użytkownika).