引用JOINed MySQL数据,如JSON表

时间:2015-12-31 23:41:50

标签: php html mysql sql mysqli

标题可能很奇怪,因为我不确定如何说出我在做什么。

我正在建立一个名单系统,将按指定排序(想想分部,公司,排等)。我希望这个显示器是完全动态的,我想尽可能地做这个。

在同一个数据库中,我有2个不相等的表,尽管它们共享一些列名,有时数据值相等,有时它们不相同。表tali_personnel_designations_weights存储指定类别(分部,公司等),而表tali_personnel_designations存储实际指定(第3步兵师,基洛公司等)。有很多事情正在发生,但1的答案将让我回到路上。两个表都有一个名为“name”的列,其中包含该条目的名称,例如_weights和第3步兵师的分区。在我的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

我理解这方面的简单修复是重命名列,以便“名称”不会发生冲突,但我正在尝试学习新的东西!

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您的查询应该是这样的:

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']

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