MySQL联表查询变量取值问题:如何获取channels表的id字段值
解决MySQL左连接查询中同名字段覆盖的问题
这个问题我之前也碰到过,核心原因是你用了SELECT *查询,当channels和groups表都有id字段时,MySQL返回的结果里,后一个表(groups)的id会覆盖前一个表(channels)的id,所以你拿到的自然是groups的id值。
下面给你两种可行的解决办法:
方法一:给目标字段起别名(推荐)
明确指定需要查询的字段,把channels表的id用AS关键字起一个独特的别名,这样就能在循环里精准获取它的值。修改后的查询语句如下:
$channeldb = mysql_query("SELECT ch.id AS channel_id, gr.id AS group_id, ch.code, gr.name, /* 这里列出你需要的其他字段 */ FROM channels AS ch LEFT JOIN groups AS gr ON gr.code = ch.code ". $searchdb ." LIMIT 100");
之后在循环里,你就可以用$channel['channel_id']来获取channels表的id值了,用$channel['group_id']获取groups表的id,完全不会混淆。
方法二:仅指定需要的字段,避免同名冲突
如果你不需要查询所有字段,只列出实际需要的字段,并且确保不重复选取同名字段(或者用别名区分),比如:
$channeldb = mysql_query("SELECT ch.id, ch.code, gr.name /* 这里只列需要的字段,不要同时选gr.id,或者给它加别名 */ FROM channels AS ch LEFT JOIN groups AS gr ON gr.code = ch.code ". $searchdb ." LIMIT 100");
这种方式下,$channel['id']就会是channels表的id值,但如果之后你又需要groups的id,还是得用别名,所以更推荐第一种方法,扩展性更好。
另外提醒一下:mysql_*系列函数已经被官方废弃了,建议换成mysqli_*或者PDO来操作数据库,安全性和兼容性都更好哦。
内容的提问来源于stack exchange,提问作者mister32
相关产品推荐
相关产品推荐

