Ваш WHERE
должен идти после JOIN
SELECT f.fid1 AS friends
FROM friendships AS f
INNER JOIN users AS u ON f.fid1 = u.fid
WHERE f.fid2 = 123456
UNION ALL
SELECT f.fid2 AS friends
FROM friendships AS f
INNER JOIN users AS u ON f.fid2 = u.fid
WHERE f.fid1 = 123456
Визуальная статья о Объединениях
Информация о Синтаксис MySQL SELECT
Как видно из синтаксиса SELECT
, вы объединяете все свои таблицы вместе, а затем применяете фильтры (предложения WHERE). Это создает один набор результатов. Затем вы можете UNION
передать это другому результирующему набору того же формата (такое же количество столбцов, одинаковые типы данных).
A UNION
вернет все отдельные записи, а UNION ALL
вернет первый набор записей, затем второй набор записей, сохраняя порядок.
Вариант 2
SELECT CASE
WHEN t.fid1 != 1 THEN t.fid1
ELSE t.fid2
END AS Friends
FROM
(
SELECT DISTINCT f.fid1, f.fid2
FROM friendships AS f
LEFT JOIN users AS u ON f.fid2 = u.fid
WHERE f.fid1 = 1 OR f.fid2 = 1
) AS t
Вариант 3
SELECT DISTINCT
TRIM(CASE
WHEN f.fid1 = 1 THEN ' '
ELSE f.fid1
END +
CASE
WHEN f.fid2 = 1 THEN ' '
ELSE f.fid2
END) AS Friends
FROM friendships AS f
LEFT JOIN users AS u ON f.fid2 = u.fid
WHERE f.fid1 = 1 OR f.fid2 = 1
Я не уверен, что будет лучше для вас, возможно, захочу протестировать его в ваших реальных условиях, мой показал, что все три работали одинаково, но у меня очень мало данных и нет индексов для моего тестирования.