【问题标题】:How to display actual data from DB如何显示数据库中的实际数据
【发布时间】:2015-12-25 22:30:04
【问题描述】:

我正在做 SQL 来显示这个和这个老师当前正在教的实际科目。它应该只显示主题的名称(例如,它在早上 8 点在教师的个人资料中显示“语言”)。在数据库中,我有表 - 时间表,并且有 start_time 和 end_time 的数据保存在 DATETIME。我有问题如何互连 SQL 和 PHP 然后显示。 我有这个 SQL 查询:

SELECT lessons.schoolday, lessons.start_time, lessons.end_time, lectors.lectorsurname, studentgroups.class_id, classes.grade, subjects.subjectname 
  FROM lessons INNER JOIN lectors ON lessons.lector_id=lectors.lector_id 
     INNER JOIN studentgroups ON lessons.studentgroup_id=studentgroups.studentgroup_id 
     INNER JOIN classes ON studentgroups.class_id=classes.class_id 
     INNER JOIN subjects ON lessons.subject_id=subjects.subject_id 
    WHERE lessons.start_time <= substring(('".date('Y-m-d H:i:s')."'),11,6)
    AND lessons.end_time >= substring(('".date('Y-m-d H:i:s')."'),11,6) 
    AND lectors.lector_id=:id");

当我更改日期而不是时间间隔(例如 start_time->0000-00-00 08:00:00、end_time->0000-00-00 08:45:00)时,它正在工作。但是通过这种方式,它只打印 Array()。 HTML 正在用 Latte 模板显示,并且有条件,如果为空数组,则显示 message=Teacher is not Teaching 当前,但这也不起作用。

.......

php代码:

     $stmt3 = $db->prepare(" SELECT l.schoolday, l.start_time, l.end_time, t.lectorsurname, sg.class_id, c.grade, s.subjectname 
                                FROM lessons l 
                                INNER JOIN lectors       t  ON l.lector_id=t.lector_id 
                                INNER JOIN studentgroups sg ON l.studentgroup_id=sg.studentgroup_id 
                                INNER JOIN classes       c  ON sg.class_id=c.class_id 
                                INNER JOIN subjects      s  ON l.subject_id=s.subject_id 
                                WHERE l.start_time <= CURTIME() AND l.end_time >= CURTIME() AND t.lector_id=:id
                                ORDER By c.grade, l.schoolday, l.start_time"); 
        $stmt3->bindValue(":id", intval($_GET["id"]));
        $stmt3->execute();
       $data=$stmt3->fetchAll();
       print_r($data);

$tplVars["lesson"] = $stmt3->fetchAll();

和拿铁模板

    <table>
    . 
    .
    .
    <tr>
        <th> Aktuálne vyučuje: </th>
    </tr>
    {foreach $lesson as $aktual}
     {if !empty($aktual['grade'])}  
    <tr>
      <td>{$aktual['grade']} </td>
    </tr>
     {/if}
     {if ($aktual['grade']) == NULL}
    <tr> <td> <span> Učiteľ momentálne nevyučuje </span></td></tr>
     {/if}
    {/foreach}
</table>

【问题讨论】:

标签: php mysql sql


【解决方案1】:

搜索一些例子。使用一些别名,它的可读性更好。 NOW() 还不够吗?更多 MySql 日期和时间函数见this link

SELECT l.schoolday, l.start_time, l.end_time, t.lectorsurname, sg.class_id, c.grade, s.subjectname 
FROM lessons l 
INNER JOIN lectors       t  ON l.lector_id=t.lector_id 
INNER JOIN studentgroups sg ON l.studentgroup_id=sg.studentgroup_id 
INNER JOIN classes       c  ON sg.class_id=c.class_id 
INNER JOIN subjects      s  ON l.subject_id=s.subject_id 
WHERE l.start_time <= NOW() AND l.end_time >= NOW() AND t.lector_id=:id

【讨论】:

  • 其实看来OP只需要datetime的时间部分,所以可能需要CURTIME()
  • 我现在正在尝试,curtime,它仍然显示 Array()
  • 查看这一行:print_r($data);您的数据库中似乎没有找到满足您在查询中写入的条件的记录。
  • 从课程中选择 l.schoolday、l.start_time、l.end_time、t.lectorsurname、sg.class_id、c.grade、s.subjectname l INNER JOIN lectors t ON l.lector_id=t。 lector_id INNER JOIN studentgroups sg ON l.studentgroup_id=sg.studentgroup_id INNER JOIN classes c ON sg.class_id=c.class_id INNER JOIN subject s ON l.subject_id=s.subject_id WHERE l.start_time = CURTIME() ...我不明白为什么它在没有条件的情况下显示数据,当我添加条件时它不显示...日期时间有问题吗? start_time 和 end_time 保存为 0000-00-00 08:00:00 f.e.
猜你喜欢
  • 2016-01-29
  • 2020-06-25
  • 2012-06-24
  • 2023-04-02
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
相关资源
最近更新 更多