2012-03-25 26 views
0

这里就是我想要做的:MySQL的加入 - 选择COL1 COL2地方在其他表(过滤)山口匹配

1) select tableB.column1 WHERE tableB.column2 = some_var

2) select tableA.column1 WHERE tableA.column2 was a result from step one.

能在这一个选择来完成。最好的办法是做到这一点,特别是在性能方面。我使用的是PHP。

编辑: 我有一个基于对话的消息系统。 1 convo table和1 replies table。回复表包含列:responder and convo_id。加载convo,我得到所有convo_id的答复。

我想使用convoId获取所有响应者的convo,并进入usertable并选择响应者的所有化身,然后将数组中的化身存储并根据需要回显出来。

+0

我想多一点点的信息会有所帮助。真的取决于A依赖于什么。 – Gohn67 2012-03-25 07:11:33

回答

0

你可能要尝试下面的SQL语句

SELECT u.avatar 
FROM usertable u 
JOIN replies r ON u.responder_id = r.responder_id 
WHERE r.convo_id = 1234 

这将让谁ID为1234

+0

谢谢大家的回答。这个答案适用于我,因为它使用了convo_id上的where。我还将在select中使用DISTINCT,因为我将重用相同用户的头像。 – Dor1000 2012-03-25 22:12:41

+0

你使用的是什么速记? “usertable你”。是为了表现还是只是可读性?有人可以将我的文档链接到它。我不知道它叫什么。 – Dor1000 2012-03-25 22:14:34

+0

我相信他们被称为别名。我不认为它们会影响性能,但通常用于可读性,因为表名可能不是描述性的,或者只是简单的长。正如您正确指出的那样,DISTINCT将是必要的,因为我的SQL语句会给出重复的头像。 – 2012-03-26 00:14:00

1

尝试以下操作:

select a.Column1 
FROM tableA a 
LEFT JOIN tableB b ON a.Column2 = b.Column1 

你也可以使用子查询,但是这不太高性能。

0

参加了对话中的所有用户的头像下面是我决定去。它建立一个数组($ avatars),其中键是用户名,值是头像。

$result = mysql_query("SELECT 
    DISTINCT users.avatar,replies.sender 
    FROM users 
    JOIN replies 
    ON users.username = replies.sender 
    WHERE replies.convo_id = '$convoID' 
"); 
while($array = mysql_fetch_assoc($result)){ 
    $avatars[$array['sender']] = $array['avatar']; 
} 
+0

convoID是一个十六进制字符串,所以在引号中。我误以为我只是从一列中选择。我没有意识到。 – Dor1000 2012-03-25 22:47:32

相关问题