Php 删除从数据库接收到的重复列表项

Php 删除从数据库接收到的重复列表项,php,mysql,database,date,html-lists,Php,Mysql,Database,Date,Html Lists,我对需要在页面中显示的列表有一些问题 这是当前显示在页面上的内容 学生 学生3 2016年02月01日08:30至14:30 学生1 2016年6月1日10:30至15:30 学生1 2016年8月1日05:30至16:30 学生3 2016年5月3日08:30至10:30 学生2 2016年1月1日13:30至18:30 学生1 2016年02月01日16:30至20:30 它应该是这样的: 学生 学生1 2016年02月01日16:30至20:30 2016年6月1日10:30至15:

我对需要在页面中显示的列表有一些问题

这是当前显示在页面上的内容

学生

  • 学生3
    2016年02月01日08:30至14:30
  • 学生1
    2016年6月1日10:30至15:30
  • 学生1
    2016年8月1日05:30至16:30
  • 学生3
    2016年5月3日08:30至10:30
  • 学生2
    2016年1月1日13:30至18:30
  • 学生1
    2016年02月01日16:30至20:30
它应该是这样的:
学生

  • 学生1
    2016年02月01日16:30至20:30
    2016年6月1日10:30至15:30
    2016年8月1日05:30至16:30

  • 学生2
    2016年1月1日13:30至18:30

  • 学生3
    2016年02月01日08:30至14:30
    2016年5月3日08:30至10:30

此信息来自数据库:

<div id="preferences">
    <h2>Leerlingen</h2>
    <?php
    $sql2 = "SELECT leerlingen.firstname, leerlingen.lastname, 
             voorkeuren.start, voorkeuren.end, voorkeuren.title FROM 
             leerlingen JOIN voorkeuren ON leerlingen.uid=voorkeuren.title";

    $result2 = $db->query($sql2);

    while ($row = $result2->fetch_assoc()) {

      ?>
        <ul>
            <li><h4><?= $row['firstname'] . " " . $row['lastname'];?></h4></li>
            <?= "Van " .  date('j-m-Y H:i', strtotime($row['start'])) . " tot " . date('H:i', strtotime($row['end'])) ?>
        </ul>

      <?php
    }
    ?>
</div>

利林根

我试图用一个学生名字的唯一数组来解决这个问题,但是学生名字下面的日期都是一样的

如果它在同一个表中并且有主键,那么尝试使用以下查询:(对于单个表)

更新:

SELECT CASE WHEN t.id = (SELECT t2.id
FROM distance t2 WHERE t2.fromid = t.fromid
GROUP BY t2.id LIMIT 1)
THEN t.id
ELSE '' END AS FromId, t.toid, t.id, t.distance
FROM distance t
注意:上述查询只返回不同的名称或id,如果它有多个表,则必须使用
JOIN
。就这样。首先,尝试在单个表中使用它

输出:

SELECT CASE WHEN t.id = (SELECT t2.id
FROM distance t2 WHERE t2.fromid = t.fromid
GROUP BY t2.id LIMIT 1)
THEN t.id
ELSE '' END AS FromId, t.toid, t.id, t.distance
FROM distance t

首先构建一个数组,然后遍历它并显示html

$sql2 = "SELECT leerlingen.firstname, leerlingen.lastname, voorkeuren.start, voorkeuren.end, voorkeuren.title
FROM leerlingen
JOIN voorkeuren
ON leerlingen.uid=voorkeuren.title group by leerlingen.firstname";

$studentArr = [];

while ($row = $result2->fetch_assoc()) {
    $studentName = $row['firstname'] . " " . $row['lastname'];
    if(!array_key_exists($studentName,$studentArr))
        $studentArr[] = $studentName;
     $studentArr[$studentName][] = $row['start'];
     $studentArr[$studentName][] = $row['end'];
}

foreach($studentArr as $key => $val){
    //your html code here
}

为什么不使用group by student name?@sAcH-可能是因为OP仍然需要所有记录,只是需要更改显示格式将order by子句应用于SQL查询;然后检查显示循环,仅显示与上一个学生姓名不同的学生姓名$sql2=“选择leerlingen.firstname、leerlingen.lastname、VoorkerEn.start、VoorkerEn.end、VoorkerEn.title FROM leerlingen JOIN VoorkerEn ON leerlingen.uid=VoorkerEn.title ORDER BY leerlingen.firstname”;order by将只对数据进行排序,而不是合并正在检索多次的同一学生@马克:这个问题似乎(至少部分)是关于MySQlUpdate@草莓for MySQL的。这太可怕了:-(我希望有其他更好的解决方案。别担心@草莓。你有没有?按顺序,而不是按分组。为什么不按分组?@sAcH谢谢,但还没有。。当我使用:进行测试时,显示:测试帐户注意:C:\xampp\htdocs\lansingerland\instructurers\irooster.php中的数组到字符串转换在第47行数组中你能帮我解决这个问题吗?)不要这样?谢谢!@草莓:请澄清一下……在给负面分数之前,请三思……否则,如果有任何问题,请纠正我wrong@OrlandoDuivestein:在遍历$studentArr之前,您是否尝试过打印它?