有什么比使用php查询集或mysql函数更好?

时间:2009-10-11 23:14:40

标签: php mysql

如果表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的函数。

4 个答案:

答案 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)

这将返回带有相应作者姓名

的邮件正文

表格作者:

  • id - 主键
  • name - 作者姓名

表格消息:

  • 正文 - 消息文本
  • 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无法执行的操作。