Php 连接查询中的mysql选择列
情景: 学生可以注册一个或多个班级 结构: 学生表有以下列:id、名字、姓氏、电子邮件、出生日期、年龄、性别、手机、地址 “类别”表有以下列:id、名称 student\u classes表包含以下列:student\u id、class\u id 现在,Iam通过内部联接查询联接3个表:学生、班级、学生班:Php 连接查询中的mysql选择列,php,mysql,inner-join,Php,Mysql,Inner Join,情景: 学生可以注册一个或多个班级 结构: 学生表有以下列:id、名字、姓氏、电子邮件、出生日期、年龄、性别、手机、地址 “类别”表有以下列:id、名称 student\u classes表包含以下列:student\u id、class\u id 现在,Iam通过内部联接查询联接3个表:学生、班级、学生班: select * from students inner join student_classes on students.id=student_classes.student_id
select *
from students inner join student_classes
on students.id=student_classes.student_id inner join classes
on student_classes.class_id=classes.id
但是我不想要学生表中的所有列。我只想知道名字。
如何修改联接查询?将该列放在SELECT子句中,而不是*
如果仍然需要其他表中的列,也可以列出它们,或者使用tablename.*尝试以下查询:
select students.firstname from ....
参考:您可以这样做:
s = students table
sc = student_classes
c = classes
查询:
select
sc.student_id,
s.firstname,
s.lastname
from students s
inner join student_classes sc on sc.student_id = s.id
inner join classes c on c.id = sc.class_id
SELECT*通常被认为是一种不好的做法。仅选择所需的列。请参阅下面的答案。它只给出学生的名字,但我也需要其他表中的列。它工作得很好,只是我还必须在上面的select查询中包含c.name,才能同时获取学生的课程名称。我得到了我想要的,但现在我得到了行,这样一个特定的学生就有多行。我希望如此,因为这是一对多。例如:一行学生id为1和课程A,另一行学生id为1和课程B。是否可以将一个学生的所有课程放在一行中?目前,我没有任何其他选项,我正在运行另一个查询来获取学生的类,例如:从类中选择名称,其中id在选择类中\u id从学生中\u类中,其中student\u id=1是的,您可以添加,例如,其中s.student\u id=1,但由于这是一个一对多关系,您无法在一个查询中执行此操作。。如果您的服务器支持存储过程,您可以通过创建存储过程并循环其中的所有学生并搜索所有课程,在一次查询中完成此操作。。但是如果我能问你MySql的初学者,那么这有点超出你的知识范围:-也许是以后的解决方案?谢谢骗子的回答。。。如果你不介意的话,我很想知道这个案例的存储过程。。。你能提供一个提示吗?
s = students table
sc = student_classes
c = classes
select
sc.student_id,
s.firstname,
s.lastname
from students s
inner join student_classes sc on sc.student_id = s.id
inner join classes c on c.id = sc.class_id