我想执行一个SQL查询,比如:
从“tb1”、“tb2”中选择“tb1”、“f1”、“tb1”、“f2”、“tb2”、“f1”;
现在的问题是,我想用PHP将它放入一个数组中,如下所示:
$result['tb1']['f1'],$result['tb1']['f2'],$result['tb2']['f1']。。。
你知道如何实现上述目标吗?恐怕没有什么功能能做到上述的我在想最好的简单方法。我不想使用像“select.”这样的查询。。作为……”除非有必要。
我事先不知道字段是什么,所以我不能按照benlumley的答案手动分配它们。
谢谢您,
亚历克

最佳答案

您需要像现在这样选择数据,然后循环将其转换为所需的格式,并且由于字段具有相同的名称,因此最容易使用别名,否则它们只会在返回的数据中相互覆盖(但是您可以使用mysql_fetch_row,它返回一个数字索引数组)。
例如:

$sql = "select tb1.f1 as tb1f1,tb1.f2 as tb1f2,tb2.f1 as tb2f1 from tb1,tb2";
$result = mysql_query($sql);
while ($row = mysql_fetch_assoc($result)) {
    $result['t1']['f1']=$row['tb1f1'];
    $result['t1']['f2']=$row['tb1f2'];
    $result['t2']['f1']=$row['tb2f1'];
}

(你的sql中的引用也是错误的)
这也不能处理多行,但是你的问题意味着你只需要一行?
无别名:
$sql = "select tb1.f1,tb1.f2,tb2.f1 from tb1,tb2";
$result = mysql_query($sql);
while ($row = mysql_fetch_row($result)) {
    $result['t1']['f1']=$row[0];
    $result['t1']['f2']=$row[1];
    $result['t2']['f1']=$row[2];
}

我更喜欢第一个版本,除非您有充分的理由使用第二个,因为如果您更改sql或添加字段等,它不太可能导致错误。
编辑:
从下面的回答中汲取元数据的思想。。。。
<?php
mysql_connect('localhost', 'username', 'password');
mysql_select_db('dbname');
$result = mysql_query('select tb1.f1, tb1.f2, tb2.f1 from tb1, tb2');
$meta = array();
for ($i = 0; $i < mysql_num_fields($result); ++$i) {
  $meta[$i] = mysql_fetch_field($result, $i);
}
while ($row = mysql_fetch_row($result)) {
   foreach($row as $key=>$value) {
     $out[$meta[$key]->table][$meta[$key]->name]=$value;
   }
}

似乎做了你想做的事-尽管你一次只能得到一排。
轻松更新以存储阵列上具有其他维度的多行:
更改:
$out[$meta[$key]->table][$meta[$key]->name]=$value;

致:
$out[][$meta[$key]->table][$meta[$key]->name]=$value;

关于php - 将多个相似字段放置在多维数组中-PHP mysql,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/500668/

10-11 07:25