sql是哪种加入

时间:2011-12-07 22:29:00

标签: php mysql sql join

我有一个论坛,我循环回复一个线程,并为每个实例查询成员数据库中的用户信息。

如果可能,我想在一个查询中执行此操作。我需要什么样的sql join? 这是我现有的代码:

$sql_result = mysql_query("SELECT * FROM forum_replies WHERE topic='$topic_id' AND del=0 ORDER BY date asc", $db); 
while($rs = mysql_fetch_array($sql_result))
{
   $sql_result2 = mysql_query("SELECT * FROM members WHERE id='$rs[author]'", $db);
   $rs2 = mysql_fetch_array($sql_result2);

查询:

SELECT * FROM forum_replies WHERE topic='$topic_id' AND del=0 ORDER BY date asc
SELECT * FROM mobsters WHERE id='$rs[author]'"

4 个答案:

答案 0 :(得分:0)

你正在寻找这样的东西:

select * 
    from forum_replies as fr
    left join mobsters as m on m.id = fr.author
    where
        fr.topic = :topic_id
        and del = 0
    order by fr.date asc

您希望选择作者的回复和数据以及每一行。 :topic_id是您的主题ID的位置(PDO中使用的符号,您应该查找并使用它而不是mysql_函数)。

我有一个重要的建议:代替select *,您应该指定您真正希望从表中返回的内容,以及您真正需要的内容。

例如:

select fr.id, fr.title, fr.date, m.id, m.nickname
    ...

答案 1 :(得分:0)

这应该让你开始:

SELECT * 
FROM forum_replies fp
JOIN mobsters mb on mb.id = fp.author
WHERE topic='$topic_id' AND del=0 ORDER BY date asc   

它说(有点英语)

给我论坛回复表中的所有列以及来自mobsters表的所有列,其id与forum_replies表中的author字段匹配。

答案 2 :(得分:0)

如果您尝试从forum_replies获取所有内容,无论有多少暴徒,那么您可以进行左连接

SELECT * FROM forum_replies LEFT JOIN mobsters on mobsters.id=forum_replies.author;

您希望修复您的选择帐户以查找重复的列名称。

答案 3 :(得分:0)

试试这个:

SELECT * FROM forum_replies 
    LEFT JOIN mobsters ON mobsters.id = forum_replies.author 
    WHERE forum_replies.topic = :ID AND forum_replies.del = 0