标题可能很奇怪,因为我不确定如何说出我在做什么。
我正在建立一个名单系统,将按指定排序(想想分部,公司,排等)。我希望这个显示器是完全动态的,我想尽可能地做这个。
在同一个数据库中,我有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
我理解这方面的简单修复是重命名列,以便“名称”不会发生冲突,但我正在尝试学习新的东西!
感谢您的帮助。
答案 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']
。
请注意,为表名使用别名会使其更具可读性。