Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以在mysql中执行此查询吗?_Mysql_Sql_Database - Fatal编程技术网

可以在mysql中执行此查询吗?

可以在mysql中执行此查询吗?,mysql,sql,database,Mysql,Sql,Database,假设我有一个名为students的表,其中包含所有学生的列表。每个学生可以在另一个表中存储许多课程,该表由学生id标识 我想做一个查询,在一个查询中从学生表中获取包含学生信息的行,并获取他的所有课程。我想要的输出如下: Array ( [0] => Array ( [id] => 5 [firstName] => Bob [lastName] => Smith

假设我有一个名为students的表,其中包含所有学生的列表。每个学生可以在另一个表中存储许多课程,该表由学生id标识

我想做一个查询,在一个查询中从学生表中获取包含学生信息的行,并获取他的所有课程。我想要的输出如下:

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循环。