可以在mysql中执行此查询吗?
假设我有一个名为students的表,其中包含所有学生的列表。每个学生可以在另一个表中存储许多课程,该表由学生id标识 我想做一个查询,在一个查询中从学生表中获取包含学生信息的行,并获取他的所有课程。我想要的输出如下:可以在mysql中执行此查询吗?,mysql,sql,database,Mysql,Sql,Database,假设我有一个名为students的表,其中包含所有学生的列表。每个学生可以在另一个表中存储许多课程,该表由学生id标识 我想做一个查询,在一个查询中从学生表中获取包含学生信息的行,并获取他的所有课程。我想要的输出如下: Array ( [0] => Array ( [id] => 5 [firstName] => Bob [lastName] => Smith
Array
(
[0] => Array
(
[id] => 5
[firstName] => Bob
[lastName] => Smith
[email] => ....
[courses] => Array
(
[0] => Array
(
[id] => 30
[name] => Test Course
[price] => 400
)
[1] => Array
(
[id] => 30
[name] => Test Course 2
[price] => 300
)
)
)
)
为了获得学生的信息,我会进行以下查询:
SELECT * FROM students WHERE something ='something'
为了让学生学习课程,我会这样做:
SELECT * FROM courses WHERE studentId = '5'
是否可以同时执行两个查询并获得如上数组所示的输出,或者我必须循环遍历每个学生并获取其课程,然后手动将其连接到数组?您可以通过将表连接在一起来实现这一点:
select s.*, c.*
from students s join
courses c
on s.studentid = c.studentid
where s.something = 'something'
如果您想在一行上显示学生信息,在另一行上显示课程信息,那么这是不可能的。所有行必须具有相同的列。基本上,新代码是:
$query = "select * from students inner join courses on studentID = '5' where something = 'something'";
$result = mysql_db_query ($dbname, $query, $link);
$id = $row[0]; # corresponding to row in students database
$firstName= $row[1]; # corresponding to row in students database
$lastName = $row[2]; # corresponding to row in students database
$email = $row[3]; # corresponding to row in students database
while($row = mysql_fetch_array($result)) {
echo 'id: '.$row[id];
echo '<br>';
echo 'name: '.$row[name];
echo '<br>';
echo 'price: '.$row[price];
echo '<br>';
}
$query = "select * from students";
$result = mysql_db_query ($dbname, $query, $link);
while($row = mysql_fetch_array($result)) {
$id = $row[0]; # corresponding to row in students database
$firstName= $row[1]; # corresponding to row in students database
$lastName = $row[2]; # corresponding to row in students database
$email = $row[3]; # corresponding to row in students database
echo 'id: '.$id;
echo '<br>';
echo 'firstName: '.$firstName;
echo ' ';
echo 'lastName: '.$lastName;
echo '<br>';
echo 'email: '.$email;
echo '<br>';
$query = "select * from courses where id = '".$id."'";
$result2 = mysql_db_query ($dbname, $query, $link);
while($row2 = mysql_fetch_array($result2)) {
echo 'name: '.$row2[1]; # corresponding to row in courses database
echo '<br>';
echo 'price: '.$row2[2]; # corresponding to row in courses database
echo '<br>';
}
}
我希望课程信息是学生行上的一个数组,这是不可能的?这不会创建多维数组。@除非通过循环,否则不可能创建多维数组?@ClickUpvote我不确定。我也在等待答案。我知道,如果你使用PHP处理它,这是可以做到的。我的猜测是否定的,但我有希望。CakePHP做到了这一点,也许你可以深入研究他们的代码:我认为group_concat可能会有所帮助。链接:你是在寻找SQL语法,还是在寻找数组格式的编码?我认为这更像是一个PHP问题,而不是SQL问题。mySQL将始终返回一个表,而不是您想要的嵌套结构。是否可以在studentId=students.id上执行内部连接课程,而不是将student id硬编码为5?我希望获取所有学生,而不是一次一个。@单击“是”将“5”替换为“$studentId”。否,则我仍将一次获取一个学生的数据,如果我有100个学生,则我必须为所有学生运行此查询100次them@clickupvote您可以为所有学生执行此操作,但不能在一个查询中完成。需要两个查询。基本上只需使用select*from students添加另一个while循环。