我有一个可以在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);
最佳答案
我看不到您的代码中定义了GetSQLValueString()
。
我猜它和this one一样吗?如果是这样,您的PHP代码似乎还可以,但是与您的原始SQL(原始SQL中的pos1_aluID='n'
与PHP的SQL中的pos1_aluID=<some integer here>
)不同。
我建议您打印出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"]
等访问它们。也许您没有为数据库连接设置字符集?
如果您的连接使用的字符集与数据库/表/列的字符集不同,则可能会出错。在
mysql_set_charset("utf8", $conndb3)
之后和"utf8"
之前尝试mysql_connect()
(用字符集替换mysql_select_db()
)。仔细检查您的数据库名称(
$database_conndb3
)和连接参数(即您在mysql_connect()
中输入的参数),确保它们与Workbench中使用的参数相同。最后,请注意,自PHP 5.5.0起,PHP中的旧mysql扩展已被弃用,以后将被删除。看到
mysql_select_db()
mysql_query()
mysql_error()
mysql_fetch_assoc()
Choosing an API
PHP: mysql v mysqli v pdo
关于php - MySQL查询在Workbench中工作正常,但在PHP中略有不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13872363/