php - 如何使用 PHP 从两个不同的表中进行选择,从结果中生成变量并对它们进行数学运算
问题描述
我正在为自己创建一个本地主机网络服务,同时学习 PHP 并使用 SQL。这是关于跟踪我的运动数据和历史的。
目前我一直在计算BMI。当用户体重和身高在同一张表中时,我想出了如何计算它。没过多久我就意识到我的身高不会很快改变,所以我想我应该把它贴在其他用户帐户信息所在的不同表格中,其中值永远不会改变。
所以到目前为止我只有两张表,“用户”用于用户帐户,“统计”用于体重和其他随时间变化的东西。
我不知道从哪里开始从不同的表格中选择值,根据体重和身高制作变量,然后正确地对它们进行数学运算。
下面的代码在使用单表时有效。现在使用 WHILE but LIMIT 1 有点愚蠢,因为我还不知道我是否想要多个结果。
提前致谢。另外,如果下面的代码从头到尾都是狗屎,请告诉我出了什么问题以及我应该如何更改它。只是学习。
编辑:我有一个关于表结构的问题,当我在工作时,我只是在即兴创作,因为我无法访问实际的数据库。
表用户 列:id - 用户名 - 高度
表统计 列:id - 用户 ID(与用户中的 'id' 相同的 id) - 权重
<?php
if (!link) {
echo "MySQL link error.";
}
$sql = "SELECT weight, height FROM stats WHERE userid=('$currentUserId') ORDER BY id DESC LIMIT 1";
$result = $link->query($sql);
if ($result = '0') {
while ($row = $result->fetch_assoc()) {
$mass = $row["weight"];
$height = $row["height"];
function bmi($mass, $height) {
$bmi = $mass / ($height * $height);
return $bmi;
}
$bmi = bmi($mass, $height);
echo "BMI: $bmi";
}
} else {
echo "0 results";
}
?>
解决方案
为此,您可以使用UNION
,这将允许您从不同的表中查询数据,您的查询将类似于:
select
u.name,
u.height,
s.weight,
u.height / (s.weight * s.weight) as bmi
from
users as u
inner join stats as s
on stats.user_id = users.user_id
注意如何users
加入到使用stats
外键 user_id
。
这意味着您的用户行必须有一个 id,而您的 stats 行也必须有一个用户 id,因此它们可以链接到他们所属的用户。
有关更多信息,请参见UNION
:
https ://dev.mysql.com/doc/refman/8.0/en/union.html