0

わかりましたので、ここに私が今持っているものがあります:

$stuff = mysql_query("SELECT * FROM Table1, Table2") or die(mysql_error());
if ($info = mysql_fetch_array($stuff)) {
    $table1ID = $info['Table1.ID'];
    $table2ID = $info['Table2.ID'];
}

私の問題は、これが機能しないことです。私は何も得ません。そして、私がこれを行うとき:

$stuff = mysql_query("SELECT * FROM Table1, Table2") or die(mysql_error());
if ($info = mysql_fetch_array($stuff)) {
    $table1ID = $info['ID'];
    $table2ID = $info['ID'];
}

もちろん同じIDです。では、最初のテーブルと 2 番目のテーブルが同じ名前の場合、それらの ID を取得するにはどうすればよいでしょうか?

4

3 に答える 3

2

結果セット内の列を名前で参照する場合は、結果セット内の各列に一意の名前が必要です。

したがって、" *" を捨てて、代わりに取得したい式のリストを指定し、いくつかの列にエイリアスを割り当てて、各列に一意の名前を付けます。

SELECT t1.id
     , t2.id AS t2_id
     , t1.somecol            
  FROM Table1 t1
 CROSS
  JOIN Table2 t2

コンマ演算子は a と同等[CROSS] JOINです。Table1 のすべての行は、Table2 のすべての行と一致します (デカルト積)。これは少し奇妙です。(これは無効ではありません。通常のパターンではありません。(光をぼんやりと巨大な結果セットにする簡単な方法であり、これは実際に必要な結果セットではないのではないかと思います。)

もう 1 つのオプションは、列を名前ではなく位置で参照することです。(しかし、Marc B が指摘するように、「位置フィールド表記法」は悪い考えです。)

于 2013-08-13T00:00:23.837 に答える
1

列名のエイリアスを試してみてください。ただし、これには、テーブルから必要なすべての列のエイリアスが含まれます。大きなテーブルの場合は面倒です

$stuff = mysql_query("SELECT Table1.ID As ID1, Table2.ID As ID2 FROM
Table1, Table2") or die(mysql_error());

// don't need to use mysql_fetch_array, unless you are referencing
// data by col num as well as key name 
if ($info = mysql_fetch_assoc($stuff)) {
    $table1ID = $info['ID1'];
    $table2ID = $info['ID2']; 
}
于 2013-08-13T00:02:35.900 に答える