php - MySQL 搜索好友查询

标签 php mysql join search mysqli

我有一个用户表:

user_id | firstname | last name | picUrl ...
    1        bob       smith       null  
    2        bobby     smith       null  
    3        rob       smithies    null  

我还有一张 friend 表:

friend1_id | friend2_id | status | date_established
      1          2        accepted   2018-02-06 10:23:01
      2          1        accepted   2018-02-06 10:23:01

我有一个简单的查询来根据条件($searchString)搜索用户并根据“最佳”匹配对他们进行排序:

$query = "SELECT user_id, firstname, lastname, picUrl, LOWER(CONCAT(firstname, ' ', lastname)) as fullname  
          FROM user
          WHERE LOWER(CONCAT(firstname, ' ', lastname)) LIKE LOWER('%" . $searchString . "%') AND user_id != '{$userId}'
          ORDER BY
             CASE WHEN fullname = LOWER('" . $searchString . "') THEN 0
                  WHEN fullname = LOWER('" . $searchString . "%') THEN 1
                  WHEN fullname = LOWER('%" . $searchString . "%') THEN 2
                  WHEN fullname = LOWER('%" . $searchString . "') THEN 3
                  ELSE 4
                END, fullname DESC
          LIMIT 5";

查询将忽略当前用户:

user_id != '{$userId}'

因为你不能加自己为好友。

如何忽略/不显示已经是 friend 的用户?

示例

我是用户 1。

我搜索“Smith”。

=> 我是用户 1,所以我不是 显示。

=> 用户 2 已经是我的 friend ,所以他们没有显示。

=> 仅显示 Rob Smithies

最佳答案

再添加一个匹配好友id的条件即可。如下更改您的查询

$query = "SELECT user_id, firstname, lastname, picUrl, LOWER(CONCAT(firstname, ' ', lastname)) as fullname  
          FROM user
          WHERE LOWER(CONCAT(firstname, ' ', lastname)) LIKE LOWER('%" . $searchString . "%') AND (user_id != '{$userId}' AND user_id not in (SELECT friend1_id from friends where friend2_id = '{$userId}') AND user_id not in (SELECT friend2_id from friends where friend1_id = '{$userId}'))
          ORDER BY
             CASE WHEN fullname = LOWER('" . $searchString . "') THEN 0
                  WHEN fullname = LOWER('" . $searchString . "%') THEN 1
                  WHEN fullname = LOWER('%" . $searchString . "%') THEN 2
                  WHEN fullname = LOWER('%" . $searchString . "') THEN 3
                  ELSE 4
                END, fullname DESC
          LIMIT 5";

关于php - MySQL 搜索好友查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48640911/

相关文章:

php - 我想用 MySQL 填充数据(按年计算月度 session 数据)

mysql - 在目录数据库中具有两个不同类别 ID 的产品 ID

mysql - 涉及多表的SQL查询设计

php - 动态传递 PHP 变量

php - 尝试提交表单路径以及如何将表单值传递到 URL

php - mysql : select rows from table 1 and test if rows exists in table 2

php - 通过单个查询获得类别和子类别

javascript - 连接同一个表中的多个 id

php - 如何获得 PHP 中使用的实际 CPU 时间?

mysql - 规范化数据库 - 从一个到多个 - 搜索所有连接的数据集