我有一个论坛,我循环回复一个线程,并为每个实例查询成员数据库中的用户信息。
如果可能,我想在一个查询中执行此操作。我需要什么样的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]'"
答案 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