Соедините таблицу друзей и пользователей (чтобы получить имена пользователей друзей?) - PullRequest
0 голосов
/ 28 июня 2011

Моя таблица пользователей не является необычной и использует первичное поле идентификатора в качестве идентификатора пользователя.

Однако таблица моих друзей выглядит следующим образом:

CREATE TABLE `friends` (
  `uid` INT NOT NULL ,                       
  `fid` INT NOT NULL ,                  
  PRIMARY KEY (`user_id`, `friend_id`)   
) ENGINE = MYISAM ;

Я могу легконайти друзей одного пользователя, то есть

SELECT fid FROM friends WHERE uid = 12

И это в основном вернет список друзей в форме идентификатора, однако я не уверен, какой метод вообще о том, как получить их имена пользователей или другие данные.Я слышал о внешних ключах (и, конечно, о присоединении), не уверен, как на самом деле выбрать то, что мне нужно сделать.

Сейчас я делаю этот уродливый метод:

SELECT username FROM users WHERE id IN (1,2,3,4..(other fid's)..)

Этоне кажется правильным вообще.

Как мне это сделать?

Ответы [ 4 ]

1 голос
/ 28 июня 2011

Было бы проще, если бы вы также опубликовали свою таблицу пользователей.Предполагая, что у вас есть пользовательская таблица, состоящая из полей: id, username, e-mail ... что угодно, вы можете сделать следующее простое объединение:

SELECT * FROM friends
INNER JOIN users
ON users.id = friends.fid
WHERE friends.uid = 1;

Что это, конечно, выбирает записи друзейкоторая соответствует критериям WHERE, и из этих записей находит соответствующую строку в таблице пользователей в соответствии с отношением, определенным в предложении ON.(Технически в движке db это работает немного по-другому). В результирующем наборе строка будет включать все столбцы из таблицы друзей и пользователей, но вы можете изменить столбцы в результате, определив SELECT как:

SELECT friends.uid as uid, friends.fid as fid , users.username as username 

Вам не нужно явно определять внешний ключ в таблице друзей, чтобы сделать такое простое соединение, как это.Но это поможет вам отслеживать отношения между таблицами, и, кроме того, вы можете сделать так, чтобы MySQL автоматически поддерживал согласованность вашей базы данных при удалении или обновлении строк.http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html.

0 голосов
/ 28 июня 2011
SELECT 
      u.username, 
      f.fid 
FROM 
      friends f, 
      users u 
WHERE 
      f.uid = 12 and 
      u.uid = f.fid
0 голосов
/ 28 июня 2011

Прежде всего, не думайте, что первичный ключ действителен в предоставленной вами таблице создания

PRIMARY KEY (`user_id`, `friend_id`) 

Эти столбцы не существуют в вашей таблице.

Второй:

SELECT users.username FROM friends,users WHERE users.id=friends.fid
0 голосов
/ 28 июня 2011

вы должны использовать JOIN.Вы должны присоединиться к таблице друзей с таблицей пользователей:

select
  f.fid,
  u.name as friend_name
from
  friends f
join
  users u on u.id = f.fid and f.uid = 16
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...