1

我有这个 MySQL 查询在 MySQL 环境中运行良好,但是在 PHP 中运行时不会因为它在每种情况下(记录)显示 REGION、PROVINCIA、COMUNA 的相同值,而不是属于每个独立记录的正确值,因为它们可能彼此不同。

我需要找到正确的 SQL 语句以允许我获取查询中涉及的每条记录 (3) 的实际 REGION、PROVINCIA、COMUNA 的方式进行查询。

表 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'原始 SQL 与pos1_aluID=<some integer here>PHP 的 SQL 中的对比)。
    • 我建议您在 PHP ( print $query_rsPostul;) 中打印出 SQL,将其复制并粘贴到 Workbench,然后运行它并检查它是否是您想要的。
  • 我看不到您如何mysql_fetch_assoc()在代码中使用结果。

    • mysql_fetch_assoc() 只获取结果集的一行。要获取所有行,请使用循环,例如

      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"]

  • 也许您没有为您的数据库连接设置字符集?

  • 仔细检查您的数据库名称 ( $database_conndb3) 和连接参数(即您输入的那些mysql_connect()。确保它们与您在 Workbench 中使用的相同。


最后,请注意PHP 中旧的mysql扩展自 PHP 5.5.0 起已被弃用,并将在未来被删除。看

于 2012-12-15T01:14:23.407 回答