【发布时间】:2014-02-04 13:31:57
【问题描述】:
此问题与由于 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"
}
您如何解决此问题?你可以使用别名,但是如果有更多的列并且你不想把它们都写出来怎么办?
【问题讨论】:
-
您真的需要从所有表中获取所有列吗?通常你只需要一组特定的列,你可以使用别名。
-
通常你只需要一个特定的集合。我使用它的情况是构建一个 MVC 框架,您希望能够在不知道所有列名的情况下提取“组合”数据。
-
你可以做的另一件事是尽量避免在不同的表中使用相同的列名,除非它们是外键(因为它们来自哪个表并不重要,它们应该是一样)。
-
这也是个好主意。这不应该是一个万能的解决方案。这只是一种选择。
标签: javascript php sql json mysqli