2011-09-08 52 views
1

我正在循环查看表中的记录,并在每个循环中打开另一个表来从中拉取数据。我需要从第二个表中的字段对主循环($ rs)进行排序。php排序sql记录

我有点初学者PHP和SQL这样下去容易对我:P

代码示例:

$sql_result = mysql_query("SELECT * FROM table1", $db); // i want this to ORDER BY data from table2 
while($rs = mysql_fetch_array($sql_result)) { 
    $sql_result2 = mysql_query("SELECT * FROM table2 WHERE id='$rs[data]'", $db); 
    $rs2 = mysql_fetch_array($sql_result2); 

    //get data from table 2 
+0

我们需要更多的信息,特别是调整表格以及你想要完成的工作。 –

回答

1

通过ResultSet循环和执行第二查询的每一行是不好的做法并导致数据库不必要的负载。
它看起来像你需要一个INNER JOIN

SELECT t1.* 
     FROM table1 t1 
INNER JOIN table2 t2 ON t2.id = t1.data 
    ORDER BY t2.field 

通过这种方式,你可以得到所有数据与一个单个查询。


编辑:
一般来说,你应该尽量避免返回所有列(SELECT *),并只选择真正需要的列:

SELECT t1.id, t2.field1, t1.field2, ... 

这不仅减少负荷数据库(通过网络选择和传输的数据较少),但它也将有助于消除双列名称,因为当您想要显示它们时(如您发现的那样),双列名称会导致问题。

你可以做两件事情,以避免这个问题:

  1. 如果两个表中存在具有相同的名称和相同的内容(例如,如果这些列用于联接表),只需选择其中的一个列(不管哪一个,因为它们是相同的)。

  2. 如果两个表中存在具有相同的名称和不同的内容列,你需要他们两个,最简单的方法是给他们一个别名:

    SELECT t1.id, t2.id AS AnotherId, ... 
    

    这将导致第二个栏被命名为“AnotherId”,所以你可以通过$rs[AnotherId]得到它。
    老实说,我不是PHP大师,所以我不知道PHP是否也理解$rs[table.field],但是有足够的数据访问技术在查询返回两个具有相同名称的列时出现问题......所以对重复列进行别名可能会导致混淆永远不会错。

+0

谢谢。以及我将如何调用echo语句的字段,我通常使用$ rs [field],它会是相同的还是我必须做$ rs [table.field]? – user880356

+0

和t1是什么意思 – user880356

+0

列名不会在结果集中返回时自动更改,因此您应该能够继续通过名称引用它们。通过SELECT *抓取每一列的效率是非常低的,除非你的应用程序实际上需要结果集中的每一列,所以你最好从t1和t2确切地指定你想要的列,这也会给你重新命名/重新标记任何列的能力在两个表中具有相同名称的列。 –