如何在mysql和php中的常用属性上连接两个表?

时间:2012-07-28 02:07:57

标签: php mysql join left-join

我有两张桌子:

table1

id message       user
1  testing       23
2  testing again 44
3  test..        23
5  lol           12
6  test..        6

table2

id user friend
1  23   44
2  23   6
3  19   12
4  23   32
5  23   76
6  23   89

我正在尝试获取messages所有朋友的23,其中包括23

像:

id message       user   id user friend
1  testing       23     n  n    n
2  testing again 44     1  23   44
3  test..        23     n  n    n
6  test..        6      2  23   6

我们可以看到12丢失了,因为他不是23的朋友,只有19

我有这个

SELECT * 
FROM table1 AS w
INNER JOIN table1 AS f ON w.user = f.friend 
WHERE (w.user = 23) 

但如果23有消息但没有朋友,则会返回null,这也会返回23的其他朋友,例如76 and 89没有消息的人。

:)困惑?

任何想法?

感谢

3 个答案:

答案 0 :(得分:1)

这样的事情应该可以解决问题,尽管内部查询可能需要稍微修改一下。

SELECT table1.*, table2.* 
FROM table1 
INNER JOIN 
(
    SELECT * 
    FROM table2 
    WHERE user = 23 or friend = 23
) 
AS table2 ON table1.user = table2.user; 

答案 1 :(得分:1)

问题在于你正在使用INNER JOIN而不是LEFT / RIGHT join

内部联接返回结果,在您查询的两个表上都有寄存器,因此如果用户没有任何朋友,则不会显示结果,与消息相同。

您可以在http://en.wikipedia.org/wiki/Join_(SQL

中找到有关不同类型联接的详细信息

答案 2 :(得分:0)

试试这个:

SELECT 
    table1.*, 
    table2.* 
FROM 
    table2 
        RIGHT JOIN table2 
        ON table2.friend = table1.user 
WEHRE 
    table2.user = 23