fetch SQL-join-statement without alias in PHP
fetch SQL-join-statement without alias in PHP
按照我的代码:
$list = $pdo->prepare("SELECT * FROM table_a INNER JOIN table_b ON table_a.id = table_b.blabla_id");
$list_result = $list->execute();
while($element = $list->fetch()) {
//CONTENT
}
现在我想用 echo $element['table_a.id'];
之类的东西获取列 - 这不起作用。
我不想为每一列都写一个别名。有办法解决这个问题吗? :)
解决方案:
$list = $pdo->prepare("SELECT * FROM table_a INNER JOIN table_b ON table_a.id = table_b.blabla_id");
$list->execute();
while($element = $list->fetch(PDO::FETCH_ASSOC)) {
$a = [];
$i = 0;
foreach ( $element as $k => $v ) {
$meta = $list->getColumnMeta($i);
$a[ $meta['table'] . '.' . $k ] = $v;
$i++;
}
echo $a['table_b.blabla'];
}
正如 kmoser 提到的,可以提高效率,因为没有必要在每个循环中检查列名,因为它们不会改变。
谢谢大家。
通过将 $list->fetch()
更改为 $list_result->fetch()
来修复对 $list->fetch()
的调用后,您可以使用 $list_result->getColumnMeta($i)
获取元信息(包括 table 名称)位置 $i
中的列,其中 $i
是结果集中的 0 索引列。
然后您可以遍历列,检索它们的 table 名称,并使用更新的键和原始数组中的值填充新数组:
while($element = $list->fetch()) {
$a = []; // New array
$i = 0;
foreach ( $element as $k => $v ) { // For each element in the fetched row
$meta = $list_result->getColumnMeta($i); // Get the meta info for column $i
$a[ $meta->table . '.' . $k ] = $v; // E.g. $a[ 'table_a.id' ] = 'Foo'
$i++; // Point to next column
}
$element = $a; // If you really need this variable name
}
现在您可以使用 $element[ 'table_a.id' ]
.
您可能希望通过仅遍历元信息一次来提高我的示例的效率,因为每列的 table 名称不会逐行更改。
有关详细信息,请参阅 https://www.php.net/manual/en/pdostatement.getcolumnmeta.php。
按照我的代码:
$list = $pdo->prepare("SELECT * FROM table_a INNER JOIN table_b ON table_a.id = table_b.blabla_id");
$list_result = $list->execute();
while($element = $list->fetch()) {
//CONTENT
}
现在我想用 echo $element['table_a.id'];
之类的东西获取列 - 这不起作用。
我不想为每一列都写一个别名。有办法解决这个问题吗? :)
解决方案:
$list = $pdo->prepare("SELECT * FROM table_a INNER JOIN table_b ON table_a.id = table_b.blabla_id");
$list->execute();
while($element = $list->fetch(PDO::FETCH_ASSOC)) {
$a = [];
$i = 0;
foreach ( $element as $k => $v ) {
$meta = $list->getColumnMeta($i);
$a[ $meta['table'] . '.' . $k ] = $v;
$i++;
}
echo $a['table_b.blabla'];
}
正如 kmoser 提到的,可以提高效率,因为没有必要在每个循环中检查列名,因为它们不会改变。
谢谢大家。
通过将 $list->fetch()
更改为 $list_result->fetch()
来修复对 $list->fetch()
的调用后,您可以使用 $list_result->getColumnMeta($i)
获取元信息(包括 table 名称)位置 $i
中的列,其中 $i
是结果集中的 0 索引列。
然后您可以遍历列,检索它们的 table 名称,并使用更新的键和原始数组中的值填充新数组:
while($element = $list->fetch()) {
$a = []; // New array
$i = 0;
foreach ( $element as $k => $v ) { // For each element in the fetched row
$meta = $list_result->getColumnMeta($i); // Get the meta info for column $i
$a[ $meta->table . '.' . $k ] = $v; // E.g. $a[ 'table_a.id' ] = 'Foo'
$i++; // Point to next column
}
$element = $a; // If you really need this variable name
}
现在您可以使用 $element[ 'table_a.id' ]
.
您可能希望通过仅遍历元信息一次来提高我的示例的效率,因为每列的 table 名称不会逐行更改。
有关详细信息,请参阅 https://www.php.net/manual/en/pdostatement.getcolumnmeta.php。