2013-04-27 6 views
0

Ниже приведены мои таблицы создания базы данных с использованием SQL. Я не могу понять, как получить имя, отображаемое как для ID, так и для LIKED из таблицы подобных. Это назначение должно быть простым, иметь возможность отображать имена людей, которые похожи друг на друга. Существует форма ввода данных, которая требует ввода идентификаторов для людей, которые любят друг друга, но затем я должен отображать имена обоих людей, которые любят друг друга ... Надеюсь, я не делал этого сбивающим с толку , Возможно ли, чтобы какой-то код sql отображал имена тех, кто любит кого.SQL - Как получить имя, используя число из другой таблицы?

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; 

Пример того, что я пытался сделать, но нужно еще один столбец для отображения человека «LIKED»:

 select B.id, B.name, A.lIKED from likes A, person B where A.id=B.id AND A.id = 1; 

пожалуйста и спасибо!

+0

В вашем запросе отсутствует соединение между двумя таблицами. – chuff

+0

где a.id = b.id выглядит как соединение со мной. –

ответ

0

попробовать это

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 
0

Похоже ваш like таблицы должны иметь две ссылки на person таблицы (что делает его промежуточный/поворотный стол); в основном, один «подобный-э» и один «подобный-или». Так like должны, вероятно, выглядеть следующим образом:

like 
-------------- 
ID int 
PersonWhoLikedID int 
PersonWhoWasLikedID int 

Тогда ваш запрос превращается в это:

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 
+0

не нужен другой col. id - это человек, который «понравился», если вы не укажете, что идентификатор таблицы like является основным автоматическим ключом для таблицы Likes. это хорошая идея – tgkprog

3

Во-первых, я машу палец в общем направлении. Программирование требует точности, и ваша фраза «использование sql» была неопределенной. Если вы имели в виду сервер sql, скажите так. Фактически, отредактируйте свое сообщение и добавьте соответствующий тег.

Во-вторых, ваши удаленные каскады находятся в неправильном месте. На самом деле, в этом случае, при удалении каскадов, вероятно, очень плохая идея.

В-третьих, что это было снова? О да, ваш вопрос. Как показать людям, которые любят друг друга? Возможно, что-то вроде этого:

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 

Кстати, я не думал, что это просто.

+0

«... Я машу пальцем в вашем общем направлении» станет моей новой любимой фразой на следующей неделе ... –

Смежные вопросы