在 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/