6

重複の可能性:
PHPで複数の同じ名前の列を持つMySQL行から結果をフェッチする方法は?

2 つのテーブルがあり、同じような列名を共有しています。

クエリは次のとおりです。

SELECT a.name,b.name
FROM tablea a 
JOIN tableb b ON a.id = b.id

結果は配列に入れられます。

while ($row = mysql_fetch_array($results)){
   $aname = $row['name'];
}

その 2 番目のテーブルを追加すると、$anametableb のデータが使用されていることに気付きました。

質問(s): どうすれば両方のname列を保存できますか?$row['a.name']機能しません。私の推測では、クエリの各結果にエイリアスを設定する必要があるかもしれません。助言がありますか?今後、列名を付けないようにする必要がありますか?


I know mysql_* is deprecated. Save your energy.

4

2 に答える 2

8

あなたの推測は正しかった。ALIAS一意にフェッチできるように、列のを作成する必要があります。

SELECT a.name Name1, b.name Name2
FROM tablea a 
JOIN tableb b ON a.id = b.id

その後、電話をかけることができます

$row['Name1']
于 2012-10-12T02:09:31.137 に答える
7

やり方がある。

mysql_field_table()$resultハンドルと序数位置を指定すると、結果セット フィールドの名前が表示されます。と組み合わせれmysql_field_name()ば、必要なものはすべて揃っているはずです。

// Fetch the table name and then the field name
$qualified_names = array();
for ($i = 0; $i < mysql_num_fields($result); ++$i) {
    $table = mysql_field_table($result, $i);
    $field = mysql_field_name($result, $i);
    array_push($qualified_names, "$table.$field");
}

mysql_fetch_qualified_arrayたとえば、これを独自の関数にラップして、 をキーにした連想配列を与えることができ"table.field"ます。

function mysql_fetch_qualified_array($result) {
  ...
  // caching $qualified_names is left as an exercise for the reader
  ...
  if ($row = mysql_fetch_row($result)) {
    $row = array_combine($qualified_names, $row);      
  }
  return $row;
}
于 2012-10-12T02:16:12.937 に答える