2011-12-02 8 views
0

J'ai un tableau user, par ex.mysql: reliant 2 tables avec 2 champs différents

userId 
userName 

et j'ai un tableau message, par ex.

messageId 
messageToId 
messageFromId 
messageContent 

Je suis en train de faire une requête pour tirer un message, mais aussi obtenir les noms d'utilisateur à partir de la table d'utilisateur en fonction du messageToId et messageFromId.

Je l'ai fait auparavant avec seulement 1 champ entre les tables, par ex.

SELECT message.*, user.userName 
    FROM message, user 
WHERE user.userId = message.messageToId 
    AND messageId = (whatever) 

Mais j'ai des problèmes avec 2 liens.

Je veux le résultat comme suit:

messageId 
messageToId 
toUserName 
messageFromId 
fromUserName 
messageContent 

Toute aide serait très apprécié, ou si quelqu'un avait une autre façon d'essayer un système de message privé avec PHP/MySQL.

Répondre

4

Il vous suffit d'utiliser joins et différents alias de table:

SELECT m.*, u1.userName AS toUserName, u2.username AS fromUserName 
FROM message m INNER JOIN user u1 ON m.messageToId = u1.userId 
    INNER JOIN user u2 ON m.messageFromId = u2.userId 
WHERE messageId = "XXX"; 
0

Est-ce que ce travail?

SELECT b.userName AS author, c.userName AS reciever, a.messageId, a.messageContent FROM message a JOIN user b ON a.messageFromId = b.userId JOIN user c ON a.messageToId = c.userId 
1

Vous devez utiliser une jointure de pour y parvenir:

SELECT `m`.*, 
     `to`.`userName` AS `to`, 
     `from`.`userName` AS `from`, 
FROM `message` `m` 
JOIN `user` `to` ON `m`.`messageToId` = `to`.`userId` 
JOIN `user` `from` ON `m`.`messageFromId` = `from`.`userId` 
WHERE `m`.`messageId` = 1 

Vous rejoindre sur la table utilisateur deux fois pour les utilisateurs d'un message particulier. Pour ce faire, vous devez utiliser des alias de table comme je l'ai fait avec to et from afin que vous puissiez les distinguer.

J'ai aussi utilisé un alias de champ pour obtenir leurs noms d'utilisateur séparément par exemple:

`to`.`username` AS `from` 
Questions connexes