搜索查询的朋友不会正确的工作方式

ktca8awb  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(329)

我正在尝试建立一个像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');

请认为你正在搜索你的朋友,你的用户id是1,你正在搜索aziz查询检查aziz是你的朋友( fri or flwr )从朋友表如果是,然后显示结果。但我的查询显示的是所有用户,而不仅仅是朋友。
在这方面有人能帮我吗?
结果必须只针对johnusername,但它显示所有用户两次。
这是一个演示

23c0lvtd

23c0lvtd1#

尝试此查询:

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 .
演示

相关问题