我有三个 MySQL 表,我需要查询它们的所有行。从每个表中获取所有行后,我需要创建一个多维数组,其中该数组的每个索引仅包含每个表中的值。我现在所拥有的有效。但是,有件事告诉我必须有更好的方法来实现这一目标。
$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')
);
我有一种直觉,这可以更有效地完成,但我不确定如何做。
如果您使查询更明确地按照您想要的顺序选择所需的列,则可以使您的代码更简单。例如:
$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 个表的行数不同),但根据上面的信息,这是您可以处理它的另一种方法。无论如何,还是要考虑一下。
试试这个:
$sql = "SELECT 'user_id' FROM ".$table;
关于:
$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 实践。