Mysql SQL-如何使用不同表中的数字获取名称?
下面是我使用SQL为数据库创建表的过程。 我不知道如何从likes表中为ID和LIKED显示名称 这个任务应该很简单,能够显示出彼此喜欢的人的名字。有一个数据输入表单,要求为彼此喜欢的人输入ID,但我必须显示彼此喜欢的人的姓名。。。。我希望我没有把这弄糊涂。 一些SQL代码是否可以显示喜欢谁的人的姓名Mysql SQL-如何使用不同表中的数字获取名称?,mysql,sql,create-table,Mysql,Sql,Create Table,下面是我使用SQL为数据库创建表的过程。 我不知道如何从likes表中为ID和LIKED显示名称 这个任务应该很简单,能够显示出彼此喜欢的人的名字。有一个数据输入表单,要求为彼此喜欢的人输入ID,但我必须显示彼此喜欢的人的姓名。。。。我希望我没有把这弄糊涂。 一些SQL代码是否可以显示喜欢谁的人的姓名 CREATE TABLE person ( ID INT PRIMARY KEY, NAME VARCHAR(50) ) engine=innodb; CREATE TABLE
CREATE TABLE person
(
ID INT PRIMARY KEY,
NAME VARCHAR(50)
) engine=innodb;
CREATE TABLE likes
(
ID INT,
LIKED INT,
constraint likesPK primary key(ID,LIKED),
constraint personFK foreign key(ID) references person(ID)
on delete cascade on update cascade,
constraint nameFK foreign key(LIKED) references person(ID)
on delete cascade on update cascade
) engine=innodb;
我试图做的事情的示例,但还需要一个列来显示“喜欢”的人:
试试这个
select b.id, b.name, (select name from person where id = a.liked)
from likes a join person b
on a.id = b.id
where b.id = some id AND b.id = a.id
试试这个
select b.id, b.name, (select name from person where id = a.liked)
from likes a join person b
on a.id = b.id
where b.id = some id AND b.id = a.id
似乎您的
like
表应该有两个对person
表的引用(使其成为中间/透视表);基本上,一个“喜欢ee”和一个“喜欢或”。所以像这样的应该是这样的:
like
--------------
ID int
PersonWhoLikedID int
PersonWhoWasLikedID int
select p1.whatever, p2.whatever
from person p1 -- this would be me
join likes l1 on p1.id = l1.id -- this is who I like, which is you
join likes l2 on l1.liked = l2.id -- this is who you like, which is me
join person p2 on l2.id = p2.id -- this is you
etc
然后,您的查询变成:
SELECT B.name, C.name AS `Liked Person`
FROM likes
LEFT JOIN person B ON likes.PersonWhoLikedID = B.ID
LEFT JOIN person C ON likes.PersonWhoWasLikedID = C.ID
似乎您的like
表应该有两个对person
表的引用(使其成为中间/透视表);基本上,一个“喜欢ee”和一个“喜欢或”。所以像这样的应该是这样的:
like
--------------
ID int
PersonWhoLikedID int
PersonWhoWasLikedID int
select p1.whatever, p2.whatever
from person p1 -- this would be me
join likes l1 on p1.id = l1.id -- this is who I like, which is you
join likes l2 on l1.liked = l2.id -- this is who you like, which is me
join person p2 on l2.id = p2.id -- this is you
etc
然后,您的查询变成:
SELECT B.name, C.name AS `Liked Person`
FROM likes
LEFT JOIN person B ON likes.PersonWhoLikedID = B.ID
LEFT JOIN person C ON likes.PersonWhoWasLikedID = C.ID
首先,我向你的大致方向挥动手指。编程需要精确性,而您的短语“使用sql”很模糊。如果您是指sql server,请这样说。事实上,编辑您的帖子并添加适当的标签
其次,您的on-delete级联位于错误的位置。事实上,在这种情况下,删除级联可能是一个非常糟糕的主意
第三,那又是什么?哦,是的,你的问题。我如何向喜欢彼此的人展示?可能是这样的:
like
--------------
ID int
PersonWhoLikedID int
PersonWhoWasLikedID int
select p1.whatever, p2.whatever
from person p1 -- this would be me
join likes l1 on p1.id = l1.id -- this is who I like, which is you
join likes l2 on l1.liked = l2.id -- this is who you like, which is me
join person p2 on l2.id = p2.id -- this is you
etc
顺便说一句,我不认为这很简单。首先,我向你的大致方向挥动手指。编程需要精确性,而您的短语“使用sql”很模糊。如果您是指sql server,请这样说。事实上,编辑您的帖子并添加适当的标签
其次,您的on-delete级联位于错误的位置。事实上,在这种情况下,删除级联可能是一个非常糟糕的主意
第三,那又是什么?哦,是的,你的问题。我如何向喜欢彼此的人展示?可能是这样的:
like
--------------
ID int
PersonWhoLikedID int
PersonWhoWasLikedID int
select p1.whatever, p2.whatever
from person p1 -- this would be me
join likes l1 on p1.id = l1.id -- this is who I like, which is you
join likes l2 on l1.liked = l2.id -- this is who you like, which is me
join person p2 on l2.id = p2.id -- this is you
etc
顺便说一句,我并不认为这很简单。你的查询缺少两个表之间的连接。其中a.id=b.id对我来说像是一个连接。你的查询缺少两个表之间的连接。其中a.id=b.id对我来说像是一个连接。“…我向你的大致方向挥动手指”将是我下周最喜欢的短语。。。“…我朝你的方向挥动手指“将成为我下周最喜欢的新短语…不需要另一个col.id是‘喜欢’的人,除非您指定让likes表id作为表likes的主自动键。这是一个好主意,不需要另一个col.id是“喜欢”的人,除非您指定让likes表id作为表likes的主自动键。这是个好主意