首页 > 解决方案 > 如何使用 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";
    }
?>

标签: phpmysqlsql

解决方案


为此,您可以使用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,因此它们可以链接到他们所属的用户。

有关更多信息,请参见UNIONhttps ://dev.mysql.com/doc/refman/8.0/en/union.html


推荐阅读