2014-08-30 100 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練習。