引用JOINed MySQL数据,如JSON表


Reference JOINed MySQL data like JSON table

标题可能很奇怪,因为我不知道该如何描述我正在做的事情。

我正在建立一个按名称排序的名册系统(想想师、连、排等)。我希望这个显示完全动态,我正在努力做到尽可能流畅。

在同一个数据库中,我有两个不相等的表,尽管它们共享几个列名,有时数据值相等,有时不相等。表tali_personnel_designations_weights存储了番号的类别(师、连等),而表tali_personnel_designations存储了实际番号(第3步兵师、基洛连等)。有很多事情在发生,但答案为1会让我重新上路。两个表都有一个名为"name"的列,其中包含该条目的名称,例如"Division"表示权重,"3rd Infantry Division"则表示名称。在我的SQL中,我希望能够同时选择这两个名称,但正如下面所示,唯一的返回来自tali_personnel_designations_weights,就好像第一个表被重新写入了结果中一样。

$SQL = "SELECT * FROM tali_personnel_designations JOIN tali_personnel_designations_weights ON tali_personnel_designations.designation_weight_id=tali_personnel_designations_weights.designation_weight_id ORDER BY tali_personnel_designations_weights.weight DESC, tali_personnel_designations.weight DESC";
$result = mysqli_query($db_handle, $SQL);
while ($db_field = mysqli_fetch_assoc($result)) {
    $name = $db_field['name'];
    echo $name; //output is value for 'name' in tali_personnel_designations_weights
    echo "<br/>";
}

我想做的,如果你能想象出来的话:

$designation_name = $db_field['tali_personnel_designations.name']; //output 3rd Infantry Division
$designationweight_name = $db_field['tali_personnel_designations_weights.name']; //output Division

我知道解决这个问题的简单方法是重命名列,这样"名称"就不会冲突,但我正在尝试在这里学到一些新东西!

谢谢你的帮助。

您的查询应该是这样的:

SELECT
    T.*, 
    T.name AS designation_name,
    TW.name AS designation_weight_name
FROM tali_personnel_designations T
JOIN tali_personnel_designations_weights TW
    ON T.designation_weight_id=TW.designation_weight_id
ORDER BY TW.weight DESC, T.weight DESC

然后在使用结果时,您可以获得$db_field['designation_name']$db_field['designation_weight_name'],而不介意(也存在)$db_field['name']

请注意,对表名使用别名会使其可读性更强。