поисковый запрос для друга не будет работать правильно - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь создать систему поиска друзей, такую ​​как Facebook, но у меня проблема с результатом.Результаты, не показывающие друзей, покажут все данные два раза.

Я сделал этот запрос:

$uid = '1';
$key = 'john'
$result = mysqli_query($this->db,"
SELECT U.username,U.userid,U.userfullname, F.userone, F.usertwo, F.role 
FROM users U, friends F WHERE U.username like '%$key' OR  
 U.userfullname like '$key%' OR  U.username like '$key%' OR  
 U.userfullname like '%$key' OR U.username like '$key' OR  
 U.userfullname like '$key'  AND F.userone=U.userid AND 
 F.userone='$uid' AND F.role='fri' AND F.userone = '$uid' 
 ORDER BY F.userone = '$uid' LIMIT 10") or die(mysqli_error($this->db));

Таблица данных пользователя,

CREATE TABLE `users` (
  `userid` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `userfullname` varchar(255) CHARACTER SET utf8 DEFAULT NULL, 
  `userstatus` enum('0','1','2') NOT NULL DEFAULT '0', 
  PRIMARY KEY (`userid`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;

INSERT INTO `users` (`userid`, `username`, `userfullname`,`userstatus`) VALUES
(1, 'john', 'John Doe', '0'),
(2, 'aziz', 'aziz', '0'),
(3, 'selma', 'Selma Kose', '0');

Таблица друзей

CREATE TABLE `friends` (
  `friendid` int(11) NOT NULL AUTO_INCREMENT,
  `userone` int(11) DEFAULT NULL,
  `usertwo` int(11) DEFAULT NULL,
  `role` enum('flwr','fri') NOT NULL DEFAULT '1', 
  PRIMARY KEY (`friendid`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


INSERT INTO `friends` (`friendid`, `userone`, `usertwo`, `role`) VALUES
(1, 1, 1, 'me'),
(2, 2, 2, 'me'),
(3, 3, 3, 'me'),
(4, 2, 1, 'fri'),
(5, 2, 3, 'flwr'),
(6, 3, 1, 'fri');

Пожалуйста, подумайте, что вы ищете своих друзей, и ваш идентификатор пользователя равен 1, и вы ищете aziz, проверяя запрос aziz - это ваш друг (fri or flwr) из таблицы друзей, если да, то покажите результат.Но мой запрос показывает всех пользователей, а не только друзей.

Чего мне здесь не хватает, кто-нибудь может мне помочь в этом отношении?

Результат должен быть только для имени пользователя john, но он показывает всем пользователям два раза.

Здесь ДЕМО

1 Ответ

0 голосов
/ 26 августа 2018

Попробуйте этот запрос:

SELECT U.username userone, UT.username usertwo, F.role FROM friends F 
JOIN users U ON F.userone = U.userid
JOIN users UT ON F.usertwo = UT.userid
WHERE 
UT.username = 'john' AND F.userone = 1 
AND (F.role = 'fri' OR F.role = 'flwr')

Он вернет всех друзей пользователя с id = 2, имя которого john.

DEMO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...