2012-02-23 136 views
2

我有我的MySQL数据库的两个表:MySQL的:连接两个简单的表

table #1: follows 

    follower | following 
------------------------ 
    john  | dan 
------------------------ 
    peter  | john 
------------------------ 
    peter  | dan 
------------------------ 
    john  | peter 
------------------------ 
    dan  | peter 
------------------------ 

table #2: questions 

    text   | username 
---------------------------- 
    something  | peter 
---------------------------- 
    something1  | dan 
---------------------------- 
    something2  | peter 
---------------------------- 
    something3  | john 

比方说,我在用的用户名“丹”的网站正在记录。

我希望看到由我遵循的人开始的最新问题。在这种情况下,只有来自“彼得”的问题。

“follow”表包含每个人记录的跟随,“questions”表包含所有问题。

我知道MySql基础知识,但我对MySql JOIN一无所知。 (< - 我想我需要JOIN来实现我的目标。)

我的问题:那么我怎么能在PHP脚本中做到这一点?

在此先感谢...

回答

3
SELECT q.username, q.text 
    FROM follows f 
     INNER JOIN questions q 
      ON f.following = q.username 
    WHERE f.follower = 'dan' 
+0

啊......谢谢乔!这是工作! ;)我想有问题,但它是如何工作的?我在MySql JOIN中是一个初学者,所以如果我想稍后修改脚本,我不知道该怎么做!那么你能简单地解释一下它是什么吗?谢谢... :) – Akos 2012-02-25 09:14:47

1

这是更有效地做数据库上的记录过滤,而不是所有的记录下来倾销和做你的PHP脚本中。您的查询既可以使用来完成一个联接:

SELECT q.* 
FROM questions q 
JOIN follows f ON f.following = q.username 
WHERE f.follower = 'dan' 

或子查询

SELECT q.* 
FROM questions q 
WHERE q.username IN (SELECT f.following 
         FROM follows f 
         WHERE f.follower = 'dan') 

(外你的问题的范围,但可能要某种类型的唯一索引添加到您的表,所以如果你想删除一个特定的问题或者删除一个你正在关注的人,你可以通过删除索引来实现,而不必指定字段组合来获得你的独特记录。)

0

- 使用USING子句 SELECT * FROM 一个INNER JOIN B USING()

- 与ON子句 SELECT * 内部联接从INNER JOIN B 上。 = b。

试试这种方法:)