mysql - 避免搜索时双重不在选择

标签 mysql

我有一个搜索引擎。我不希望被阻止的用户参与此搜索。 我有表 block :

id - autoincrement
user - who is blocking
block - who is blocked

和表用户。 我有这个选择,它工作正常:

select c.nome, c.user, c.id, p.foto from users c 
left join profile_picture p on c.id=p.user
where (c.id not in (select `block` from block where user = '1')) //avoid double block select
and (c.id not in (select `user` from block where block = '1')) //avoid double block select
and (c.user like '%uk%' OR c.nome like '%uk%')

问题是,我能否避免这种双重不进入,首先避免被阻止的用户被搜索,其次避免被阻止的用户搜索谁阻止了他。我可以避免两侧都选择这种双 block 表吗?

最佳答案

您可以使用 UNION 将两个查询合并为一个查询

select c.nome, c.user, c.id, p.foto 
from users c 
left join profile_picture p on c.id=p.user
where c.id not in 
(
  select `block` as  from block where user = '1'
  union  
  select `user` as block from block where block = '1'
) 
and (c.user like '%uk%' OR c.nome like '%uk%')

关于mysql - 避免搜索时双重不在选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49806131/

相关文章:

mysql - DATETIME 和 TIMESTAMP 之间的同步

mysql - 如何使用 MYSQL 将数据分成 3 个不同的时间(24 小时)框架

php - 根据文本文件适配MySQL数据库

mysql - 加速 MySQL 查询(包括子查询连接)?

android - 将android应用程序连接到在线mysql数据库

java - JPQL CASE 语句中的 WHERE 子句问题

mysql - 在同一语句中添加列+索引

mysql - 使用 mysql 和许多外键加入多个表

mysql - 做 MySQL 对象层的更好方法

mysql - 插入或更新 - 正确的方法