是否有一种运行单个MySQL查询的方法,该查询从各种表中选择数据,并在PHP中单独返回可分配给数组的每个表,而不是每个表的查询并手动将结果分配给阵列
例如
// Interpretation:
$multiple = mysql_query("select * from table_a; select * from table_b;");
foreach ($multiple as $table => $results) {
$tables[$table] = $results;
}
而不是:
$tables = array (
"table_a" => mysql_query ("select * from table_a;"),
"table_b" => mysql_query ("select * from table_b;"),
);
任何指导都将非常感谢。谢谢。
答案 0 :(得分:1)
不是没有讨厌的SQL技巧。我不认为你建议的方式更有效率。如果这两个表是巨大的,那么最好将巨大的请求分解为两个不那么大的请求。
如果它们相对较小,它仍然不会产生太大影响。
但是,如果带宽很高,我仍然不确定在一个查询中是否可以获取两个表。
答案 1 :(得分:0)
你为什么不使用工会?
$multiple = mysql_query("select 'table_a', table_a.* from table_a union select 'table_b', table_b.* from table_b");
$tables=array();
foreach ($multiple as $table => $results)
{
$tables[$results[0]] = array_shift($results);
}
如果表中的列数不同,则只放入NULL而不是丢失列。除非在测试中,否则我将不会使用*。
不同列数的示例查询:
select 'table_a', table_a.col1, table_a.col2, table_a.col3 from table_a union select 'table_b', table_b.col1, table_b.col2, NULL from table_b;
答案 2 :(得分:0)
打开两个DB链接,使用mysql_unbuffered_query执行查询。 Mysql_unbuffered_query执行查询但是立即返回到PHP代码,而mysql引擎处理查询。以后,当你使用mysql_fetch_row时,就是从mysql引擎中真正检索数据的时候。
这样,如果你在两个数据库链接(两个mysql_connect)中执行两个查询,每个链接的每个查询,你可以开始使用第一个,而mysql引擎是第二个'缓存/工作'你的PHP代码正在执行。另外,如果使用无缓冲查询,则不能执行mysql_num_rows,因为可能是完整的结果集尚未在内存中。
mysqli-> query(“...”,MYSQLI_ASYNC)或PDO / MYSQL是一种更好,更现代的方法,但你需要一个与ASYNC查询兼容的mysqlnd或libmysql。