具有以下列的数据库:
我假装我的程序是用户选择他们想要的标签,以便与所选标签相对应的练习显示在屏幕上。例如,如果用户选择标签 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/