因此,基本上,我有一个名为'topics'的MySQL表,另一个名为'replies'的表,例如。在表'主题'中,有一个名为'relforum'的字段,它将此主题与论坛部分相关联。在表''回复'中,有一个名为'reltopic'的字段,它将回复与主题相关联。两个表都有一个id字段,auto_increment主键。
现在,我想选择某个论坛的所有回复。由于'回复'没有'relforum'字段,我的方式是:
这就是这样的:
$query = mysql_query("SELECT * FROM `topics` WHERE `relforum` = '1'");
while($array = mysql_fetch_array($query)) {
$temp = mysql_query("SELECT * FROM `replies` WHERE `reltopic` = {$array['id']}");
$results[] = mysql_fetch_array($temp);
}
有没有办法将所有这些合并到更少的查询中?因为这个过程基本上会在该论坛中的每个主题运行一个查询加一个。这太过分了:P
将relforum字段添加到回复表是一个解决方案(我仍在设计数据库部件,因此添加它不是问题),但我想看看是否有解决方案。
我真的不擅长SQL的东西,我只知道基本的SELECT / INSERT / UPDATE,我通常使用PHPMyAdmin生成最后两个,所以...我想我需要一些帮助。
感谢阅读!
答案 0 :(得分:4)
您需要学习使用连接。下面的链接适用于SQL服务器,但mySQl的理论基本连接几乎相同。请不要使用基于逗号的连接,因为它们已经过时了18年,并且是一个常规实践。学习使用ANSII标准连接。
http://www.tek-tips.com/faqs.cfm?fid=4785
在访问数据库时,您几乎不想使用任何循环。数据库被设计为在被要求操作数据集而不是单个行时表现最佳。因此,您需要停止考虑循环并开始考虑所需的数据集。
答案 1 :(得分:3)
SELECT
r.*
FROM
replies r
INNER JOIN
topics t
ON
r.reltopic = t.id
WHERE
t.relforum = 1;
答案 2 :(得分:2)
你基本上需要连接两个表。
SELECT * FROM `replies`, `topics` WHERE `replies`.`reltopic` = `topics`.`id` AND `topics`.`relforum` = '1';
答案 3 :(得分:2)
SELECT r.* FROM replies r, topics t
WHERE t.relforum = 1 AND r.reltopic = t.id
摆脱反引号。它们是非标准的,混乱的代码
答案 4 :(得分:2)
是的,你应该在这里使用join。但是,您需要更加谨慎地处理结果集。
联接是关系数据库模式中的基本查询。将它们添加到您的知识库中:)