如果表1中有数据需要用于返回表2中返回的数据,那么表1中返回的每一行。在PHP中使用一组查询的效率更高一个在另一个的while循环中嵌入或查询中的SQL函数?
例如:
$qry = mysql_query(SELECT date FROM table1)
while($res = mysql_fetch_array($qry))
{
$qry = mysql_query("SELECT name FROM table2 WHERE date=$res['date']")
}
或者将此作为从查询中的table1返回Id的函数。
答案 0 :(得分:3)
A(左/右)加入?
除非我误解了这个问题......
答案 1 :(得分:3)
我认为您正在寻找JOIN
sql语法。如果您有2个表:消息和作者,并且您想要与作者一起返回消息。然后您可以编写以下SQL语句:
SELECT m.body, a.name FROM message m
LEFT JOIN author a ON (a.id=m.author_id)
这将返回带有相应作者姓名
的邮件正文表格作者:
表格消息:
UPD1:
这将比循环每条消息更快,并选择一个作者。因为JOIN
允许您返回单查询中的所有数据(而不是使用for
循环时的N x查询)。
UPD2:
使用您的表格查询将如下所示:
SELECT t1.date, t2.name FROM table1 t1 LEFT JOIN table2 t2 ON (t2.date=t1.date)
答案 2 :(得分:2)
这取决于在while循环期间或查询本身中是否更容易找到数据。
因此,如果数据库必须将子查询基于主查询中每行的结果,并且主查询中总共有1000行和100个结果,则必须检查所有行100次,所以它运行了100,000个子查询。
因此,请考虑主要查询的结果数量。如果你的while循环必须查询DB 100次,而DB可以在一个查询中更快更有效地执行,那就更好了。但是,如果你想要一个答案的子集,你可以说'只根据最后一组结果进行查询',那么while循环会更好。
答案 3 :(得分:1)
使用效率更高
PHP中的一组查询,一个隐藏在另一个
的while循环中
或
查询中的SQL函数
似乎你自己回答了你的问题,不是吗?
您发送给dbms的每个查询都必须通过网络发送,解析,分析然后执行。您可能希望最小化发送到数据库的查询数。
可能存在例外情况,例如,如果数据处理需要dbms无法执行的操作。