php - 重复数据库中的数据?

标签 php mysql database

具有以下列的数据库:

Database Columns

我假装我的程序是用户选择他们想要的标签,以便与所选标签相对应的练习显示在屏幕上。例如,如果用户选择标签 1,则会出现练习 1 和练习 2。如果您选择标签 1 和 3,则会出现练习 1 和 2。

我的程序的问题是,例如,当用户选择标签 1 和 3 时,会出现练习 1 和 2,但会重复练习 2。或者当您选择标签 1 和 2 时,重复练习 1。

有没有人知道有什么办法可以避免这种情况发生?只显示一次练习?

这里我展示了我的部分代码:

$sql = "SELECT * FROM exercises, union, tags where exercise_id = exercise_id_fk and tag_id = tag_id_fk";

if (!empty($_SESSION['tags_array'])) {
    $sql .= " and (";
    foreach ($_SESSION['tags_array'] as $tagId)
        $sql .= 'tag_id = ' . $tagId . ' or ';

    $sql .= "tag_id = -1);";
}

$result = $conn->query($sql);
while($row = $result->fetch_assoc()) {
    echo $row["exercise_id"] . ". " .  $row["title"] . "<br>";
}

最佳答案

我建议您尝试使用 GROUP BY 表达式,例如:

$sql = "SELECT * FROM exercises e INNER JOIN union u ON u.exercise_id_fk = e.exercise_id INNER JOIN tags t ON t.tag_id = u.tag_id_fk WHERE 1 = 1";

if (!empty($_SESSION['tags_array'])) {
        $sql .= " and (";
        foreach ($_SESSION['tags_array'] as $tagId)
            $sql .= 't.tag_id = ' . $tagId . ' or ';

        $sql .= "t.tag_id = -1)";
}

$sql .= " GROUP BY e.exercise_id;";

$result = $conn->query($sql);
while($row = $result->fetch_assoc()) {
    echo $row["exercise_id"] . ". " .  $row["title"] . "<br>";
}

关于php - 重复数据库中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51650430/

相关文章:

php - 插入MYSQL失败

php - 如何在其中设置的PHP中编写查询

javascript - Node.js 和 XAMPP 有什么区别

php - 在 CodeIgniter 中列出表的一些用户

mysql - 在 mysql 中,我如何只搜索前 10 条记录

c# - 如何将我的统一项目连接到 ec2 实例上的 mysql 服务器

php - 如何在 services.yml 文件中添加多个事件作为 Doctrine symfony 中的事件监听器

php - 为每个用户分配唯一的序列号

php - 关于具有多个选项的多个项目的订单表的问题

php - 翻转事件 = -1 至事件 = 1