2014-08-30 96 views
0

我有三个MySQL表,我需要查询所有的行。从每个表中获取所有行后,我需要创建一个多维数组,其中该数组的每个索引仅包含每个表的值。我现在拥有的作品。但是,有些事情告诉我必须有更好的方法来完成这一点。排序PHP数组

$tables = array('table_one', 'table_two', 'table_three'); 
$final = array(); 

foreach($tables as $table) { 
    $sql = "SELECT * FROM ".$table.""; 
    $query = mysqli_query($con, $sql)or die(mysqli_error($con)); 
    $num = mysqli_num_rows($query); 
    $i = 0; 

    while($row = mysql_fetch_array($query)) { 
     $id[$i] = $row['user_id']; 

     $i++; 
    } 

    for($i=0;$i<$num;$i++) { 
     if(!is_array($final[$i])) { 
      $final[$i] = array($id[$i]); 
     } else { 
      array_push($final[$i], $id[$i]); 
     } 
    } 
} 

最终的结果是什么,看起来像这样

$final = array(array('table_one_row_one_val', 'table_two_row_one_val', 'table_three_row_one_val'), 
      array('table_one_row_two_val', 'table_two_row_two_val', 'table_three_row_two_val'), 
      array('table_one_row_three_val', 'table_two_row_three_val', 'table_three_row_three_val') 
     ); 

我得到的肠道砍伐,这可以更有效地完成,但我不知道怎么样。

感谢,

兰斯

+3

使用MySQL JOIN而不是三次选择单个表。 http://dev.mysql.com/doc/refman/5.1/en/join.html – 2014-08-30 23:24:11

+0

是的,但表格中各行的值之间没有任何共性 – Lance 2014-08-30 23:32:38

+0

如果没有任何共性,为什么你拿三张桌子吗?这绝对没有逻辑。 – 2014-08-30 23:36:37

回答

1

你可以让你的代码更简单,如果你让你的查询更加明确,在订单中选择你想要的列,你希望他们。例如:

$sql = 'SELECT table_one.user_id as u1, table_two.user_id as u2, table_three.user_id as u3 FROM ' . implode(',', $tables); 

然后,结果集的每一行都将按正确的顺序排列,从而减少数组的构建。例如:

$query = mysqli_query($con, $sql)or die(mysqli_error($con)); 

while($row = mysql_fetch_array($query)) { 
    $final[] = array($row['u1'], $row['u2'], $row['u3']); 
} 

可能有秩序,在这些阵列中的数据的关系(尤其是如果所有3个表不具有相同的行数)的问题,而是工作,就在上面的信息,这是另一种方法,你可以接近它。无论如何要思考。

+0

这是一个可怕的建议。如果这三张桌子有大约五万行,会怎么样?这将剔除服务器与此完全加入 – bksi 2014-08-31 00:19:38

+0

bksi,没问题。这里有很多潜在的缺陷(正如我注意到的),但OP已经存在这个问题。对环境或数据一无所知,建议更好的整体设计是不可能的。我只是回答了这个问题,希望能给OP提供一些其他想法。 – 2014-08-31 00:23:05

0

试试这个:

$sql = "SELECT 'user_id' FROM ".$table; 
0

关于什么:

$tables = array('table_one', 'table_two', 'table_three'); 
$final = array(); 

foreach($tables as $tableIndex => $table) { 
    $sql = "SELECT user_id FROM ".$table; 
    $query = mysqli_query($con, $sql)or die(mysqli_error($con)); 
    $i = 0; 

    while($row = mysql_fetch_array($query)) { 
     $final[$tableIndex][$i] = $row['user_id']; 
     $i++; 
    } 
} 

它始终是最好只选择列,您将使用。 SELECT *不是一个好的SQL练习。