PHP+MySQLi两张表关联查询异常:仅返回第一条数据求助
嘿,作为刚接触PHP&MySQLi时踩过无数坑的过来人,我大概率能猜到你遇到的问题!
首先最常见的原因:你没有用循环遍历关联查询的结果集。mysqli_fetch_array()每次调用只会从结果集中取出一行数据,如果只调用一次,自然只能拿到第一条。而你之前用$query_type能显示所有韩国菜,应该是当时写了while循环来遍历结果,但换成关联查询的$query_fetch时,可能只调用了一次mysqli_fetch_array(),所以只返回了第一条。
举个例子,错误的写法是这样的:
// 只取了一行,自然只能看到第一条数据 $row = mysqli_fetch_array($query_fetch); echo $row['food_name'] . ' - 评分:' . $row['rating'];
正确的做法是用while循环遍历整个结果集:
// 循环取出每一行数据,直到结果集为空 while ($row = mysqli_fetch_array($query_fetch)) { echo $row['food_name'] . ' - 描述:' . $row['description'] . ' - 评分:' . $row['rating'] . '<br>'; }
另外还有两种可能需要排查:
- 关联查询的SQL语句有问题:比如你用了
INNER JOIN但部分韩国菜没有对应的评分记录,导致这些菜品被过滤掉?或者不小心加了LIMIT 1?建议检查你的SQL语句,比如正确的关联查询应该是这样(假设食物表是foods,评分表是ratings,两表通过food_id关联):
SELECT f.food_name, f.description, r.rating FROM foods f LEFT JOIN ratings r ON f.food_id = r.food_id WHERE f.cuisine_type = 'korean'
用LEFT JOIN可以保证即使菜品没有评分也能被显示出来。
- 结果集被提前消耗:如果你在调用
mysqli_fetch_array($query_fetch)之前,已经用mysqli_fetch_assoc()这类fetch方法操作过这个结果集,结果集是单向的,已经取过的行就不能再重复取了,也会导致只能拿到剩下的行(甚至只剩第一条)。
先检查循环的问题,这大概率是你当前的症结所在!
内容的提问来源于stack exchange,提问作者Sang Nguyen
相关产品推荐
相关产品推荐

