【问题标题】:Retrieve data from User table based on the id from Friends Table根据好友表中的 id 从用户表中检索数据
【发布时间】:2016-04-02 05:06:02
【问题描述】:

我有 2 个表用户和朋友。

用户表字段(id、用户名、密码、fname、lname、昵称等)

好友表字段(id、user_id、friend_id)

现在的问题是我正在尝试根据朋友表 Friends_id 访问用户数据。

mysql查询是:

SELECT *
FROM Users
inner JOIN Friends
ON Users.ID=Friends.Friend_ID;

但需要所有用户数据。

【问题讨论】:

  • 详细说明你想要哪些列
  • 你在找自引用连接,我给你写一个答案

标签: mysql sql select join self-join


【解决方案1】:

您正在寻找self referential join

#app/models/user.rb
class User < ActiveRecord::Base
   has_and_belongs_to_many :friends,
     class_name: "User", 
     join_table: :friends,
     foreign_key: :user_id, 
     association_foreign_key: :friend_id
end

您必须更改friends 表以删除id 列(根据has_and_belongs_to_many guidelines):

它将允许您调用:

#config/routes.rb
resources :users do
   resources :friends, only: [:create, :destroy] #-> url.com/users/:user_id/friends
end

#app/controllers/friends_controller.rb
class FriendsController < ApplicationController
   before_action :set_user

   def create
      @user.friends << @friend
   end

   def destroy
      @user.friends.delete @friend
   end

   private

   def set_user
      @user   = User.find params[:user_id]
      @friend = User.find params[:id]
   end
end

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT U1.id AS UserId, 
           U1.username AS UserName, 
           U1.fname AS UserFName, 
           U1.lname AS UserLName,
           U2.id AS FriendId, 
           U2.username AS FriendUserName, 
           U2.fname AS FriendFName, 
           U2.lname AS FriendLName
    FROM Friends F 
    INNER JOIN Users U1 ON F.user_id = U1.id
    INNER JOIN Users U2 ON F.Friend_ID = U2.id;
    

    【讨论】:

      猜你喜欢
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 2020-04-22
      • 2011-04-30
      • 2017-05-07
      • 2012-12-07
      • 2020-08-21
      相关资源
      最近更新 更多