【问题标题】:help with sql select syntax帮助 sql 选择语法
【发布时间】:2011-07-28 08:00:06
【问题描述】:

他来这里是为了迷惑他的一天! (从现在开始应该是我的手柄)

我很困惑,非常迷茫。

我需要弄清楚如何创建一个 select 语句来让 FriendID 与那里的 UserID 相关联

您可以看到 FriendID 与我的 User 表的 UserID 相关,因此如果 FriendID = 2 则显示 UserID 2 的详细信息。

我想要做的是,如果我的用户 ID 为 1,我想显示我所有的朋友,我的用户 ID 是由会话设置的,

我需要做的是找出我的朋友是谁,所以从 SessionID = UserID 的朋友中选择 FriendID,然后如何找出 FriendsID 在 User 表中属于谁,并显示他的名字、第二名和他的图片路径。

非常混乱...

我的表结构如下:

所以总结一下我在选择命令中需要什么:

找出谁是我的朋友(当前会话 UserID 有 FriendID) 显示自己的UserID相关的friendID的FirstName、SecondName、图片路径

例子:

我 (userID=1) 有 FriendID 2 = UserID 2 所以选择 firstname, secondname from User where UserID=2

我的表结构可能存在关系问题,但不确定。

希望你能理解我的困惑:

编辑对于那些看不到我的数据库图像的人

    SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;

SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';



CREATE SCHEMA IF NOT EXISTS `gymwebsite2` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;

USE `gymwebsite2` ;



-- -----------------------------------------------------

-- Table `gymwebsite2`.`User`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `gymwebsite2`.`User` (

  `UserID` INT NOT NULL AUTO_INCREMENT ,

  `Email` VARCHAR(245) NULL ,

  `FirstName` VARCHAR(45) NULL ,

  `SecondName` VARCHAR(45) NULL ,

  `DOB` VARCHAR(45) NULL ,

  `Location` VARCHAR(45) NULL ,

  `Aboutme` VARCHAR(1045) NULL ,

  `username` VARCHAR(45) NULL ,

  `password` VARCHAR(45) NULL ,

  PRIMARY KEY (`UserID`) )

ENGINE = InnoDB;





-- -----------------------------------------------------

-- Table `gymwebsite2`.`WallPosting`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `gymwebsite2`.`WallPosting` (

  `idWallPosting` INT NOT NULL AUTO_INCREMENT ,

  `UserID` INT NOT NULL ,

  `Wallpostings` VARCHAR(2045) NULL ,

  PRIMARY KEY (`idWallPosting`) ,

  INDEX `fk_WallPosting_User` (`UserID` ASC) ,

  CONSTRAINT `fk_WallPosting_User`

    FOREIGN KEY (`UserID` )

    REFERENCES `gymwebsite2`.`User` (`UserID` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

ENGINE = InnoDB;





-- -----------------------------------------------------

-- Table `gymwebsite2`.`Pictures`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `gymwebsite2`.`Pictures` (

  `idPictures` INT NOT NULL AUTO_INCREMENT ,

  `UserID` INT NOT NULL ,

  `picturepath` VARCHAR(1045) NULL ,

  PRIMARY KEY (`idPictures`) ,

  INDEX `fk_Pictures_User1` (`UserID` ASC) ,

  CONSTRAINT `fk_Pictures_User1`

    FOREIGN KEY (`UserID` )

    REFERENCES `gymwebsite2`.`User` (`UserID` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

ENGINE = InnoDB;





-- -----------------------------------------------------

-- Table `gymwebsite2`.`Friends`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `gymwebsite2`.`Friends` (

  `idFriends` INT NOT NULL AUTO_INCREMENT ,

  `UserID` INT NOT NULL ,

  `FriendID` INT NOT NULL ,

  PRIMARY KEY (`idFriends`) ,

  INDEX `fk_Friends_User2` (`FriendID` ASC) ,

  INDEX `fk_Friends_User1` (`UserID` ASC) ,

  UNIQUE INDEX `FriendID_UNIQUE` (`FriendID` ASC) ,

  CONSTRAINT `fk_Friends_User2`

    FOREIGN KEY (`FriendID` )

    REFERENCES `gymwebsite2`.`User` (`UserID` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION,

  CONSTRAINT `fk_Friends_User1`

    FOREIGN KEY (`UserID` )

    REFERENCES `gymwebsite2`.`User` (`UserID` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

ENGINE = InnoDB;







SET SQL_MODE=@OLD_SQL_MODE;

SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;

SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

【问题讨论】:

  • 您的图片未加载。请描述您的表结构。
  • 嗯奇怪?我会重新编辑一秒钟
  • 图像问题已解决。您可以在我的回答中找到解决方案。

标签: c# asp.net mysql sql html


【解决方案1】:
select u.FirstName, u.SecondName, p.picturePath
from User u
join Friends f
  on f.FriendId = u.UserId
join Pictures p
  on p.UserId = u.UserId
where f.UserId = SessionId ( <-- sessionId is your id)

【讨论】:

  • 请注意,如果不是所有用户都有图片,则最好将图片上的联接更改为左联接。
【解决方案2】:
SELECT u.firstName, u.secondName, p.picturepath
FROM User as u, Friends as f, Pictures as p
WHERE f.UserID = $sessionID 
AND u.UserID = f.FriendID
AND p.UserId = f.FriendID

【讨论】:

  • 您想要图片路径...您还需要加入Pictures 表。 as 是可选的。这是相当古老的学校,我只是觉得它读起来不错。
  • 是的,对不起,布赖恩,一旦我注意到我删除了我的评论,你很快就回复了,我以为我一开始看到的是双重的
【解决方案3】:

这样做:

    SELECT User.*, Pictures.PicturePath
           FROM (User INNER JOIN Friends 
                ON User.UserId = Friends.FriendId) table
                INNER JOIN ON table.UserId = Pictures.UserId
           WHERE Friends.UserId = 1 // this is your id (SessionId)

这将返回您朋友的完整信息

【讨论】:

    【解决方案4】:

    如果我正确理解了您的问题和数据模型,那么您要做的是查询通过成为朋友彼此连接的用户之间的多对多递归关系(即,通过 Friends 表就像多对多关系中的相交实体)。

    您可以通过使用 2 个不同的别名在查询中两次加入 User 表来做到这一点,如下所示:

    select 
        u2.UserID,
        u2.FirstName,
        u2.SecondName,
        p.picturepath
    from User u1 -- This gets me
    join Friends f on u1.UserID = f.UserID -- This gets my friends
    join User u2 on f.FriendID = u2.UserID -- This gets my friends info
    join Pictures p on p.UserID = u2.UserID -- This gets my friends pics
    where u1.UserID = 1  -- ...or whatever; don't actually hardcode "1"!
    

    【讨论】:

    • 不同表中的图片路径怎么样?
    • @Garrith:抱歉,疏忽了!现已更正
    【解决方案5】:
        SELECT x.FirstName,
               x.SecondName,
               x.Email,
               z.picturepath
          FROM ( Friends AS x,
                 User AS y
               )
     LEFT JOIN Pictures AS z
            ON x.FriendID = z.UserId
         WHERE x.UserID = 1  # <- this is determined by the session ID
           AND x.FriendID = y.UserID
    

    【讨论】:

      【解决方案6】:
      SELECT 
         u.FirstName, 
         u.SecondName, 
         p.picturepath
      FROM User as u 
        INNER JOIN Friends as f
        ON u.UserId = f.FriendId
          INNER JOIN Pictures as p
          ON u.UserId = p.UserId
      WHERE f.UserId = 1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-04
        • 1970-01-01
        • 1970-01-01
        • 2013-08-21
        • 2011-07-28
        相关资源
        最近更新 更多