PHP MySQL多表条码查询:如何关联products与more_barcodes表
条码搜索时关联products与more_barcodes表的解决方案
问题根源
你的原有SQL仅查询了products表的所有字段,且通过GROUP BY合并了同一商品的记录,导致无法获取more_barcodes表中的条码数据;同时PHP代码也没有正确读取关联表的条码,自然无法展示。另外SQL里的GROUP BY products.products_id是笔误,正确字段应为products.product_id。
修正后的SQL查询语句
我们可以用GROUP_CONCAT把同一商品对应的所有额外条码合并成一个字符串,方便后续PHP直接输出:
SELECT products.*, GROUP_CONCAT(more_barcodes.barcode SEPARATOR '<br>') AS more_barcodes_list FROM products LEFT JOIN more_barcodes ON products.product_id = more_barcodes.product_id WHERE products.barcode1 LIKE '%$user_search%' OR products.barcode2 LIKE '%$user_search%' OR products.barcode3 LIKE '%$user_search%' OR more_barcodes.barcode LIKE '%$user_search%' GROUP BY products.product_id
修正后的PHP代码
调整PHP逻辑,正确读取主表条码,同时输出合并后的额外条码:
$sql_check = mysql_query($query); while ($row_check = mysql_fetch_array($sql_check)) { echo "<br>" . $row_check['name']; // 展示products表中的条码 echo $row_check['barcode1']; if (!empty($row_check['barcode2'])) { echo "<br>" . $row_check['barcode2']; } if (!empty($row_check['barcode3'])) { echo "<br>" . $row_check['barcode3']; } // 展示more_barcodes表中的所有条码 if (!empty($row_check['more_barcodes_list'])) { echo "<br>ALL BARCODES:<br>" . $row_check['more_barcodes_list']; } }
补充说明
- 原有PHP代码里的
$row_check[barcode]是错误的,对应products表的字段应为barcode1; GROUP_CONCAT默认用逗号分隔,这里指定<br>是为了直接在页面换行展示条码;- 另外,
mysql_*系列函数已被废弃,建议改用mysqli或PDO扩展操作数据库,避免安全与兼容性问题。
内容的提问来源于stack exchange,提问作者alkarana
相关产品推荐
相关产品推荐

