此问题涉及由于JOIN中的列名冲突而导致数据丢失。具体来说,使用PHP的mysqli并将数据作为JSON对象返回。
假设您有两个使用另一个查找表相互关联的表。
例如,假设您有用户:
user
id name
---------------------
1 John Thomas
和食谱:
recipe
id name
---------------------
15 Fried Chicken
这些配方的所有权/权利在查找表中定义:
user_recipe
user recipe
--------------
1 15
因此,在这种情况下,John Thomas有权查看炸鸡配方。
假设您希望获得包含所有这些数据的记录,因此您可以构建如下查询:
SELECT *
FROM `user_recipe`
INNER JOIN `recipe`
ON `recipe`.id = `user_recipe`.recipe
INNER JOIN `user`
ON `user`.id = `user_recipe`.user;
现在让我们说你正在使用PHP的mysqli对象。然后使用json_encode
并将数据传回您的javascript。大!除了数据如下:
{
id:15,
user:1,
recipe:15,
name:"Fried Chicken"
}
您如何解决此问题?你可以使用别名,但是如果有更多的列并且你不想将它们全部写出来呢?
答案 0 :(得分:1)
如果你使用mysqli的方法fetch_fields
,你可以将数据分成组,或者在字段名称或其他任何你想要的地方添加前缀。
以下是一个例子:
$sql = '...QUERY...';
$mysqli->query($sql);
$fields = $result->fetch_fields();
$output = array();
while ($row = $result->fetch_array())
{
$newoutput = array();
foreach($row as $key=>$value)
{
if (is_numeric($key))
$newoutput[$fields[$key]->table][$fields[$key]->name] = $value;
}
$output[] = $newoutput;
}
$result->free();
echo json_encode($output);
这样做之后,数据将以这种格式传回:
{
user_recipe:{
user:1,
recipe:15
},
user:{
id:1,
name:"John Thomas"
},
recipe:{
id:15,
name:"Fried Chicken"
}
}
当然,您可以根据需要构建JSON对象。