mysql-PHP/SQL-只计算并显示特定列的唯一值?
基本上,我有以下代码和表格设置。(这是我正在制作的一个视频上传系统)。我有一个页面可以显示视频的 JUST 标签,然后您应该能够单击一个标签,它会搜索带有您单击的标签或多个标签的任何视频。
我遇到的问题:我的数据库是这样设置的(对于相关的部分:)列:tag1、tag2、tag3、tag4 行:每一行都有视频信息加上值(如果有,如果用户可能为 NULL选择 no t 以设置 tag1、tag2、tag3 和 tag4 的标签。
会有重复的。“video1”的行中可能有一个标签,tag1 (col) 中的值为“cat”,但“video2”的行中也可能有一个标签,tag3 (col) 中的值为“cat” )。
当我当前运行我的 SQL 查询时,如下所示的代码,如果列之间有重复,它将在标签列表中显示该重复标签两次。现在,在我的 SQL 查询中,我可以使用 DISTINCT 函数从单个列中忽略/删除重复的标签(假设 tag1 的列有 5 个不同的行,其值为“cat”,我可以忽略它并将其设置为显示/使用该值一次)。
我正在寻找的最终结果:
-- 在标签 1、标签 2、标签 3、标签 4 列之间获取任何/所有唯一结果,在页面上显示零重复,但在显示的每个唯一标签后面,我想要计算该值在所有标签之间出现的次数所有行中的列。像这样的例子:
猫:5 狗:8 鸟:2(等)
下面的代码目前给了我显示在页面上的结果(ps不要介意奇怪的命名标签。我只是在上传当前在网站上的视频时进行了测试):
猫测试idk测试测试kitty猫猫换油kitty猫kitty测试胡子龙测试
还包括数据库表的图片。 数据库表
代码:
<div class="tags-list">
<?php
$sql = "SELECT DISTINCT tag1, tag2, tag3, tag4 FROM videos;";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// Output of each row:
while ($row = $result->fetch_assoc()) {
// Define $row variables
$tag1 = $row['tag1'];
$tag2 = $row['tag2'];
$tag3 = $row['tag3'];
$tag4 = $row['tag4'];
echo
"<div class='list'>
<a class='tags'>$tag1</a>
</div>
<div class='list'>
<a class='tags'>$tag2</a>
</div>
<div class='list'>
<a class='tags'>$tag3</a>
</div>
<div class='list'>
<a class='tags'>$tag4</a>
</div>
";
}
} else {
echo "No tags found :(";
}
?>
</div>