2016-11-06 16 views
1

在mysql中,我該如何編寫一個可以獲取所有業務數據的查詢,並且同時(或者不是如果這是另一種更好的方式)檢查用戶是否正在關注該業務?我有以下關係表,以確定用戶是否遵循業務(狀態= 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

+0

該代碼似乎是正確的..有什麼問題..? e – scaisEdge

+0

@scaisEdge左連接.. – sagi

回答

1

你正在尋找一個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 
相關問題