在 php 和 mysql 中,我对多个表使用连接查询。每个表都有字段名称title
。我想从每个 JOINed 表中获取 title
的值,但是当我使用 php 检索结果集的每一行时,我只获得 title
的最后一个值,这这是我的查询。
SELECT UC.user_id,
UC.courses_id,
UC.semester_id,
UC.batch_id,
UC.department_id,
U.title,
U.firstname,
U.lastname,
B.title ,
CO.title,
SE.title,
DEP.title
FROM tbl_user_courses AS UC
INNER JOIN tbl_user AS U ON UC.user_id = U.id
INNER JOIN tbl_batch AS B ON UC.user_id = B.id
INNER JOIN tbl_courses AS CO ON UC.user_id = CO.id
INNER JOIN tbl_semester AS SE ON UC.user_id = SE.id
INNER JOIN tbl_departments AS DEP ON UC.user_id = DEP.id
where UC.trash=0
order by UC.user_id desc
它的php代码
<?php
if($rec)
foreach( $rec as $value => $k){
?>
<?php echo $k['title'];
<?php echo $k['title'];?>
<?php echo $k['title'];?>
<?php echo $k['title'];?>
}
现在我怎样才能获得每个表标题及其字段名称。
最佳答案
您可以通过添加 AS <alias>
为字段指定别名。字段后。
SELECT UC.user_id,
UC.courses_id,
UC.semester_id,
UC.batch_id,
UC.department_id,
U.title as user_title,
U.firstname,
U.lastname,
B.title AS batch_title,
CO.title AS course_title,
SE.title AS semester_title,
DEP.title AS department_title
FROM tbl_user_courses AS UC
INNER JOIN tbl_user AS U ON UC.user_id = U.id
INNER JOIN tbl_batch AS B ON UC.user_id = B.id
INNER JOIN tbl_courses AS CO ON UC.user_id = CO.id
INNER JOIN tbl_semester AS SE ON UC.user_id = SE.id
INNER JOIN tbl_departments AS DEP ON UC.user_id = DEP.id
where UC.trash=0
order by UC.user_id desc
如果运行此查询,则可以使用别名而不是字段名称,因此请使用 $k['department_title']
获取部门名称。
我认为“标题”用于表示部门或类(class)的名称是一个相当奇怪的术语,但如果它们都被命名为“名称”,您将再次遇到同样的问题。 :D
顺便说一句,您可以使用命名约定来减少这样的冲突。就像你有 department_id
(不仅仅是 id
)您还可以使用 department_name
或者只是 department
。不过,了解别名还是有好处的,因为您迟早会需要它们。
关于php - 从 JOIN 查询检索行时缺少列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28266074/