如何使用php将mysql结果连接成一个字符串

如何使用php将mysql结果连接成一个字符串,php,mysql,web,Php,Mysql,Web,这是一个显示特定教师时间表的代码, 1--从下拉列表中选择教师姓名,并从表“assign_teacher”中进行比较,2--存储各自教师的信息,3--获取上课时间和学生姓名并显示 $query="SELECT * FROM assign_teacher WHERE teacher ='$nam' order by session asc " ; $result=mysql_query($query); $row = mysql_affected_rows();

这是一个显示特定教师时间表的代码, 1--从下拉列表中选择教师姓名,并从表“assign_teacher”中进行比较,2--存储各自教师的信息,3--获取上课时间和学生姓名并显示

    $query="SELECT * FROM assign_teacher WHERE teacher ='$nam' order by session asc " ;
    $result=mysql_query($query);
    $row = mysql_affected_rows();

    if($row >=1){  
    while($ro= mysql_fetch_array($result))

    {  
    ?>

    <tbody>

    <td><?php echo $ro['session']; ?> </td>

    <td><?php $days=explode(',', $ro['days']); if (in_array("Monday", $days) ) {  
            echo $ro['student']; ?>  </td>
                            <?php }
            else echo "----" ; ?>
            <td> <?php if (in_array("Tuesday", $days)) {  
                    echo $ro['student']; ?>  </td>
            <?php } else echo "-----" ; ?>
    <td> <?php if (in_array("Wednesday", $days)) {  
    echo $ro['student']; ?>  </td>
    <?php } else echo "-----" ; ?>
    <td> <?php if (in_array("Thursday", $days)) {  
    echo $ro['student']; ?>  </td>
    <?php } else echo "-----" ; ?>
    <td> <?php if (in_array("Friday", $days)) {  
                echo $ro['student']; ?>  </td>
            <?php } else echo "-----" ; ?>
            <td> <?php if (in_array("Saturday", $days)) {  
                echo $ro['student']; ?>  </td>
            <?php } else echo "-----" ; ?>

        </tr>
        <?php } ?>
    </tbody>
<?php } ?>
$query=“选择*FROM assign_teacher,其中teacher='$nam'按会话asc排序”;
$result=mysql\u query($query);
$row=mysql_受影响的_行();
如果($row>=1){
而($ro=mysql\u fetch\u数组($result))
{  
?>


输出如下表所示:

上午10:00-11:30 |约翰

上午10:00-11:30 |阿莱娜

下午02:00-03:30 |阿里

下午2:00-03:30 |史密斯


但实际上我想要这个:

上午10:00-11:30 |约翰,阿莱娜

下午2:00-03:30 |阿里,史密斯


我想让同一时间的学生的名字用逗号隔开,
有人能帮我修一下吗!

使用mysql
GROUP\u CONCAT
GROUP by

SELECT tab1.*,GROUP_CONCAT(tab1.student) as students FROM 
assign_teacher AS tab1 WHERE teacher ='$nam' 
group by tab1.timing order by tab1.session asc
试试这个:-

$query="SELECT tab1.*,GROUP_CONCAT(tab1.student) as students FROM 
    assign_teacher AS tab1 WHERE teacher ='$nam' 
    group by tab1.session order by tab1.session asc" ;

使用
GROUP\u CONCAT

$query="SELECT a.*,GROUP_CONCAT(a.student SEPARATOR ',') as students FROM assign_teacher AS a WHERE teacher ='$nam' group by a.timing order by a.session asc " ;

确实需要从数据库中获取一些数据,以了解事物之间的关系

但是,我假设您有一个针对每位教师的课程表,其中一列包含该课程每周几天的逗号分隔列表,另一列包含该课程的学生姓名

然后,您需要每个会话的输出,每个(工作)周的每一天都有一列,其中包含当天会话中以逗号分隔的学生列表

例如:-

SELECT session,
        GROUP_CONCAT(IF(FIND_IN_SET('Monday', days), tab1.student, NULL)) as students_monday,
        GROUP_CONCAT(IF(FIND_IN_SET('Tuesday', days), tab1.student, NULL)) as students_tuesday,
        GROUP_CONCAT(IF(FIND_IN_SET('Wednesday', days), tab1.student, NULL)) as students_wednesday,
        GROUP_CONCAT(IF(FIND_IN_SET('Thursday', days), tab1.student, NULL)) as students_thursday,
        GROUP_CONCAT(IF(FIND_IN_SET('Friday', days), tab1.student, NULL)) as students_friday,
        GROUP_CONCAT(IF(FIND_IN_SET('Saturday', days), tab1.student, NULL)) as students_saturday
FROM assign_teacher AS tab1 
WHERE teacher ='$nam' 
GROUP BY tab1.session 
ORDER BY tab1.session asc
通过一些示例数据,我可以检查这是否适用于您的表

编辑

按如下方式构建测试表以上SQL的结果是我认为您想要的:-

CREATE TABLE assign_teacher
(
    ID INT, 
    teacher VARCHAR(255), 
    student VARCHAR(255), 
    session VARCHAR(255), 
    days VARCHAR(255)
);

INSERT INTO assign_teacher(ID, teacher, student, session, days)
VALUES
(1, 'Azir', 'Shehzor', '10:00-10:30 am', 'Monday,Saturday'),
(2, 'Azir', 'Salar', '10:00-10:30 am', 'Monday,Saturday');
(3, 'Azir', 'Fred', '14:00-14:30 am', 'Tuesday,Wednesday'),
(4, 'Azir', 'Burt', '14:00-14:30 am', 'Tuesday,Wednesday');
(5, 'Azir', 'Sally', '14:00-14:30 am', 'Tuesday,Wednesday,Thursday,Friday'),
(6, 'Azir', 'Sid', '16:00-16:30 am', 'Monday,Tuesday,Saturday');
(7, 'Azir', 'Bilbo', '16:00-16:30 am', 'Monday,Tuesday,Saturday'),
(8, 'Azir', 'Frodo', '16:00-16:30 am', 'Monday,Tuesday,Saturday');
(9, 'Azir', 'Maggie', '16:00-10:30 am', 'Monday,Tuesday,Saturday'),
(10, 'Azir', 'Lisa', '16:00-16:30 am', 'Monday,Tuesday,Saturday');
结果

session         students_monday         students_tuesday        students_wednesday      students_thursday       students_friday     students_saturday
10:00-10:30 am  Shehzor,Salar           NULL                    NULL                    NULL                    NULL                Shehzor,Salar
14:00-14:30 am  NULL                    Fred,Burt,Sally         Fred,Burt,Sally         Sally                   Sally               NULL
16:00-10:30 am  Maggie                  Maggie                  NULL                    NULL                    NULL                Maggie
16:00-16:30 am  Sid,Bilbo,Frodo,Lisa    Sid,Bilbo,Frodo,Lisa    NULL                    NULL                    NULL                Sid,Bilbo,Frodo,Lisa
编辑

将SQL放入脚本:-

<?php
$query = "SELECT session,
                    GROUP_CONCAT(IF(FIND_IN_SET('Monday', days), tab1.student, NULL)) as students_monday,
                    GROUP_CONCAT(IF(FIND_IN_SET('Tuesday', days), tab1.student, NULL)) as students_tuesday,
                    GROUP_CONCAT(IF(FIND_IN_SET('Wednesday', days), tab1.student, NULL)) as students_wednesday,
                    GROUP_CONCAT(IF(FIND_IN_SET('Thursday', days), tab1.student, NULL)) as students_thursday,
                    GROUP_CONCAT(IF(FIND_IN_SET('Friday', days), tab1.student, NULL)) as students_friday,
                    GROUP_CONCAT(IF(FIND_IN_SET('Saturday', days), tab1.student, NULL)) as students_saturday
            FROM assign_teacher AS tab1 
            WHERE teacher ='".mysql_real_escape_string($nam)."' 
            GROUP BY tab1.session 
            ORDER BY tab1.session ASC";

$result = mysql_query($query);
while($ro = mysql_fetch_array($result))
{  
    ?>

    <tbody>

    <td><?php echo $ro['session']; ?> </td>

    <td>
    <?php 
        echo "<td>".(($ro['students_monday'] == '') ? "----" : $ro['students_monday'] )."</td>";
        echo "<td>".(($ro['students_tuesday'] == '') ? "----" : $ro['students_tuesday'] )."</td>";
        echo "<td>".(($ro['students_wednesday'] == '') ? "----" : $ro['students_wednesday'] )."</td>";
        echo "<td>".(($ro['students_thursday'] == '') ? "----" : $ro['students_thursday'] )."</td>";
        echo "<td>".(($ro['students_friday'] == '') ? "----" : $ro['students_friday'] )."</td>";
        echo "<td>".(($ro['students_saturday'] == '') ? "----" : $ro['students_saturday'] )."</td>";
    ?>
    </tbody>
<?php 
} 
?>

你能给我一个明确的代码行吗?这样我就可以使用它了:-选择tab1.*,组CONCAT(tab1.student)作为学生,从中指定教师为tab1,其中教师=“$nam”按tab1分组。按tab1.session计时顺序asc@TehreemFatimafrom这“时机”在哪里变量来自?我将“计时”替换为“会话”,现在它工作了,但它没有组合结果它只显示了一个结果,甚至没有在新行中显示具有相同计时的第二个结果,从这里开始这个“计时”只是考虑了一个例子,在数据库中替换你的字段的时间。是的,我用“session”来改变,但是不工作,只显示一个结果,而不是第二个,在同一个时间里,我有一个表名“分配老师”,它有“老师”、“会话”、“学生”、“天”的栏。,和yes days是逗号分隔的1 Azir Shehzor 10:00-10:30 am Monday,Saturday,2 Azir Salar 10:00-10:30 am Monday,Saturday,这是我的数据库中的一些示例数据,ID,教师,学生,会话,days*分别使用测试数据/表和我认为符合您需要的查询结果进行编辑。