Maison > Article > développement back-end > mysql_field_table在union后无效?
———————
mysql_field_table 是获取数据表名的函数,
正常情况下的的sql select 只查询1个表,是可以执行,
请问:当sql select在union查询多个表之后,请问怎么样获取多个表名?
———————
可以执行的代码:
//sql select 只查询1条数据
<code>$sql = " SELECT id,title FROM `TABLE1` WHERE id IN($id) ORDER BY id DESC LIMIT 0,10 "; $result = mysql_query($sql); $table_name = mysql_field_table($result,0); echo "<br>表名:$table_name";</code>
———————
问题的代码:
<code>//合并2个表,按时间倒序取出前10条记录 $sql = " SELECT id,title FROM `TABLE1` WHERE id IN($id) UNION SELECT id,title FROM `TABLE2` WHERE id IN($id) UNION ORDER BY id DESC LIMIT 0,10 "; $result = mysql_query($sql); if( $result ){ if( mysql_num_rows($result) ){ $a = array(); while($arr = mysql_fetch_array($result)){ $table_name = mysql_field_table($result,0); echo "<br>表名:$table_name"; //***就是在这里 //***请问各位,怎么获取多个表名 } } }</code>
———————
敬礼,
致谢!
———————
mysql_field_table 是获取数据表名的函数,
正常情况下的的sql select 只查询1个表,是可以执行,
请问:当sql select在union查询多个表之后,请问怎么样获取多个表名?
———————
可以执行的代码:
//sql select 只查询1条数据
<code>$sql = " SELECT id,title FROM `TABLE1` WHERE id IN($id) ORDER BY id DESC LIMIT 0,10 "; $result = mysql_query($sql); $table_name = mysql_field_table($result,0); echo "<br>表名:$table_name";</code>
———————
问题的代码:
<code>//合并2个表,按时间倒序取出前10条记录 $sql = " SELECT id,title FROM `TABLE1` WHERE id IN($id) UNION SELECT id,title FROM `TABLE2` WHERE id IN($id) UNION ORDER BY id DESC LIMIT 0,10 "; $result = mysql_query($sql); if( $result ){ if( mysql_num_rows($result) ){ $a = array(); while($arr = mysql_fetch_array($result)){ $table_name = mysql_field_table($result,0); echo "<br>表名:$table_name"; //***就是在这里 //***请问各位,怎么获取多个表名 } } }</code>
———————
敬礼,
致谢!
union之后的结果集是被视同为同一张数据库表的,所以你这里无论怎么取mysql_field_table都只能得到一个表名。正确的作法是你在构建SQL语句的时候,给每一条记录附加上它所来自于的数据库表名,这样你从结果集里就能知道这条数据是来自于哪一张数据库表的了。
<code>$sql = " SELECT id,title,'TABLE1' AS ComesFrom FROM `TABLE1` WHERE id IN($id) UNION SELECT id,title,'TABLE2' FROM `TABLE2` WHERE id IN($id) UNION ORDER BY id DESC LIMIT 0,10 ";</code>