我这里有个问题,
有两个用户
用户1配置文件\u id
3115267284
然后用户2配置文件\u id
3028630039
有一个名为friends的表,其结构为
from_profile_id
to_profile_id
request
blocked_by
这就是用户的数据和结构
var_id profile_id fullname firstname lastname
180 3115267284 John Louis Domincel John Louis Domincel
181 3028630039 James Domincel James Domincel
182 3450766778 asdasd asdsadas asdasd asdsadas
假设friends表的数据是
from_profile_id to_profile_id request blocked_by
3028630039 3115267284 3 3115267284
我使用这个命令来搜索数据
SELECT * FROM users
WHERE fullname LIKE "%'.$s_final.'%" LIMIT 5
这是预览
我只想使配置文件2,这是3028630039将无法搜索配置文件1,这是3115267284原因配置文件id 1是谁阻止了两个,但配置文件1将能够搜索配置文件id 2
我也试过使用 JOIN
以及 ISNOT()
但没有成功
2条答案
按热度按时间k0pti3hp1#
假设有人被多人阻止,我会在php代码中查询sql数据库,并为运行搜索的用户提取所有被阻止的id。然后,我将遍历并检查php代码,如果所查询的id在列表中,则停止该过程。
如果你真的在寻找效率,这可能不是最好的解决方案。我想您也可以运行查询,然后在php中执行检查,这样就不会执行2个查询。
也许其他人有一个纯粹的答案。
lyfkaqu12#
假设执行搜索的用户的profile\u id的变量名为
$searcher_profile_id
.你可以用
Left Join
把两张table连接起来。连接条件的定义是为了得到对应于“blocked user”的行。我们只需要考虑那些没有被阻止的用户WHERE .. IS NOT NULL
. 这有时被称为“反连接”: