1

MySQL 環境で正常に動作するこの MySQL クエリがありますが、PHP で実行すると、すべてのケース (レコード) で REGION、PROVINCIA、COMUNA に同じ値が表示されるため、それぞれの独立したレコードに属する正しい値ではなく、動作しません。それらは互いに異なる場合があるためです。

クエリに含まれるすべてのレコード (3) の実際の REGION、PROVINCIA、COMUNA を取得できるような方法で、クエリを実行する適切な SQL ステートメントを見つける必要があります。

テーブル pos1postul、pos2pad、および pos3mad のレコードは、フィールド REGION_ID、PROVINCIA_ID、COMUNA_ID を通じて、テーブル dir_region、dir_provincia、および dir_comuna を参照しています。

どんな助けでも大歓迎です。

SELECT * FROM db3.pos1postul 

INNER JOIN db3.dir_region AS region1 ON pos1postul.pos1_region=region1.REGION_ID
INNER JOIN db3.dir_provincia AS provincia1 ON  pos1postul.pos1_prov=provincia1.PROVINCIA_ID 
INNER JOIN db3.dir_comuna AS comuna1 ON pos1postul.pos1_comu=comuna1.COMUNA_ID, db3.pos2pad

INNER JOIN db3.dir_region AS region2 ON pos2pad.pos2_regionpad=region2.REGION_ID
INNER JOIN db3.dir_provincia AS provincia2 ON     pos2pad.pos2_provpad=provincia2.PROVINCIA_ID 
INNER JOIN db3.dir_comuna AS comuna2 ON pos2pad.pos2_comupad=comuna2.COMUNA_ID, db3.pos3mad 

INNER JOIN db3.dir_region AS region3 ON pos3mad.pos3_regionmad=region3.REGION_ID 
INNER JOIN db3.dir_provincia AS provincia3 ON  pos3mad.pos3_provmad=provincia3.PROVINCIA_ID 
INNER JOIN db3.dir_comuna AS comuna3 ON pos3mad.pos3_comumad=comuna3.COMUNA_ID 

WHERE pos1_aluID='n' 
AND pos2_padID=pos1_IDpostulpad 
AND pos3_madID=pos1_IDpostulmad

PHP コード:

$idpostul_rsPostul = "-1";
if (isset($idpostul)) {
  $idpostul_rsPostul = $idpostul;
}
mysql_select_db($database_conndb3, $conndb3);
$query_rsPostul = sprintf("SELECT * FROM db3.pos1postul INNER JOIN db3.dir_region AS     region1 ON pos1postul.pos1_region=region1.REGION_ID INNER JOIN db3.dir_provincia AS     provincia1 ON pos1postul.pos1_prov=provincia1.PROVINCIA_ID INNER JOIN db3.dir_comuna AS     comuna1 ON  pos1postul.pos1_comu=comuna1.COMUNA_ID, db3.pos2pad INNER JOIN db3.dir_region AS region2 ON pos2pad.pos2_regionpad=region2.REGION_ID  INNER JOIN db3.dir_provincia AS provincia2 ON pos2pad.pos2_provpad=provincia2.PROVINCIA_ID INNER JOIN db3.dir_comuna AS comuna2 ON  pos2pad.pos2_comupad=comuna2.COMUNA_ID, db3.pos3mad INNER JOIN db3.dir_region AS region3 ON pos3mad.pos3_regionmad=region3.REGION_ID  INNER JOIN db3.dir_provincia AS provincia3 ON pos3mad.pos3_provmad=provincia3.PROVINCIA_ID INNER JOIN db3.dir_comuna AS comuna3 ON  pos3mad.pos3_comumad=comuna3.COMUNA_ID WHERE pos1_aluID=%s AND pos2_padID=pos1_IDpostulpad AND pos3_madID=pos1_IDpostulmad",  GetSQLValueString($idpostul_rsPostul, "int"));
$rsPostul = mysql_query($query_rsPostul, $conndb3) or die(mysql_error());
$row_rsPostul = mysql_fetch_assoc($rsPostul);
4

1 に答える 1

0
  • GetSQLValueString()あなたのコードで定義されているの がわかりません。
    • これと同じだと思いますか?もしそうなら、あなたのPHPコードは問題ないように見えますが、元のSQLとは異なります(pos1_aluID='n'元のSQLpos1_aluID=<some integer here>とPHPのSQL)。
    • PHP(print $query_rsPostul;)でSQLを印刷し、コピーしてWorkbenchに貼り付けてから実行し、目的のSQLであるかどうかを確認することをお勧めします。
  • mysql_fetch_assoc()コードでの結果をどのように使用するかわかりません。

    • mysql_fetch_assoc() 結果セットの1行のみを取得します。すべての行を取得するには、ループを使用します。例:

      while ($row_rsPostul = mysql_fetch_assoc($rsPostul)) {
          // Do something with $row_rsPostul here.
      }
      

編集(2012-12-16):

  • クエリ結果に同じ名前の列があるのではないでしょうか。

    • 列エイリアスを使用する必要があります。例:

      SELECT region1.REGION_ID as region1_REGION_ID,
             region2.REGION_ID as region2_REGION_ID,
             region3.REGION_ID as region3_REGION_ID,
             ....
      

      $row_rsPostu["region1_REGION_ID"]次に、、$row_rsPostu["region2_REGION_ID"]などを使用してそれらにアクセスできます。

  • DB接続の文字セットを設定しなかったのではないでしょうか。

  • データベース名($database_conndb3)と接続パラメータ(つまり、入力したもの)mysql_connect()を再確認してください。Workbenchで使用したものと同じであることを確認してください。


そして最後に、 PHPの古いmysql拡張機能はPHP 5.5.0で非推奨になり、将来削除されることに注意してください。見る

于 2012-12-15T01:14:23.407 に答える