mysql - 我怎样才能获得所有业务数据,就好像当前用户正在关注它们一样?

标签 mysql

在 mysql 中,我如何编写一个查询来获取所有业务数据,同时(或者如果不是更好的另一种方式)检查用户是否关注该业务?我有以下关系表来确定用户是否正在关注某个企业(status=1 表示该人正在关注):

CREATE TABLE IF NOT EXISTS `Relationship_User_Follows_Business` (
  `user_id` int(10) unsigned NOT NULL,
  `business_id` int(10) unsigned NOT NULL,
  `status` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '1=following, 0=not following'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE `Relationship_User_Follows_Business`
  ADD UNIQUE KEY `unique_user_business_id` (`user_id`,`business_id`);

假设业务表仅包含不同业务的数据,如姓名、电话号码等。我想在查询中返回所有业务数据 (Business.*)。我想将状态(0 或 1)附加到每个业务行的末尾以确定用户是否关注该业务。我尝试了以下查询,但它不起作用,因为它正在缩小结果以仅在存在关系行时显示业务。我希望显示所有企业,无论关系行是否存在,因为我只在用户关注时创建关系行:

SELECT Business.*, Relationship_User_Follows_Business.status FROM Business, Relationship_User_Follows_Business WHERE 104=Relationship_User_Follows_Business.user_id AND Business.id=Relationship_User_Follows_Business.business_id

请注意,我使用 104 作为测试用户 ID。用户 ID 通常取决于用户,而不是静态的 104。

最佳答案

您要查找的是 LEFT JOIN 而不是 INNER JOIN,后者保留主表和所有匹配行中的所有 记录从详细信息表。另外,避免使用隐式连接语法(逗号分隔)并使用正确的连接语法:

SELECT Business.*, Relationship_User_Follows_Business.status
  FROM Business
  LEFT JOIN Relationship_User_Follows_Business 
   ON Business.id = Relationship_User_Follows_Business.business_id
     AND Relationship_User_Follows_Business.user_id = 104

关于mysql - 我怎样才能获得所有业务数据,就好像当前用户正在关注它们一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40448020/

相关文章:

php - 无法获取更新的文本区域值

mysql - 如何为 MySQL 数据库创建 Mondrian 模式 (xx.mondrian.xml)

mysql - 添加两个计算列以使用 "WHERE"子句进行查看

php - 如何根据特定键值从两个表(在数据库中)的比较中获得多个计数

php - 函数中的 mysqli_fetch_assoc

mysql - MySQL 中的 CHECK 约束不起作用

mysql - 通过 AWS 命令​​行从 AWS RDS 导出 MySQL 转储

php - 在 codeigniter global 中关闭表单自动完成

mysql - 一般错误 : 1364 with STRICT_TRANS_TABLES disabled

mysql - "Conversion from string to type Double is not valid"错误VB.NET