Исходя из собственного понимания задачи, позволю немного вмешаться в структуру
1. Таблица пользователей
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
2. Таблица друзей
Добавлены внешние ключи на таблицу пользователей
Поскольку статусов ограниченное количество, то статусы вынес в отдельные атрибуты
CREATE TABLE `friends` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_one` int(11) NOT NULL,
`user_two` int(11) NOT NULL,
`is_accepted` tinyint(1) NOT NULL DEFAULT '0',
`is_rejected` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `fk_user_one_idx` (`user_one`),
KEY `fk_user_two_idx` (`user_two`),
CONSTRAINT `fk_user_one` FOREIGN KEY (`user_one`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `fk_user_two` FOREIGN KEY (`user_two`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
3. Запрос со статусом заявок для первого пользователя будет не очень сложным
SELECT
u1.name,
IF (
u2.id IS NOT NULL,
IF (
f1.is_accepted,
CONCAT('Дружит c ', u2.name),
CONCAT (
'Не дружит c ',
u2.name,
': ',
IF(
f1.is_rejected,
'заявка отклонена',
'заявка ожидает рассмотрения'
)
)
),
'Ни с кем не дружит'
) status
FROM
user u1
LEFT JOIN
friends f1
ON f1.user_one = u1.id
LEFT JOIN
user u2
ON u2.id = f1.user_two
WHERE
u1.id = 1
Если я неправильно понял вашу задачу, готов обсудить и запрос и структуру таблиц.
Не исключено, что если я лучше пойму задачу, то можно будет создать лучшую структуру для хранения заявок в друзья, по которой получится сделать простой запрос