mysql表中没有重复值,但重复了一些回显的值

时间:2018-03-31 17:59:22

标签: php mysql

我正在尝试制作一些内容,以回显播放列表标签列表的网址。请允许我展示我的mysql表(名为apple_music):

ID | URL              | Tags
---+------------------+------------------------------
 1 |https://ex1.com   | Drake, Big Sean, Kanye West,
---+------------------+------------------------------
 2 |https://ex2.com   | Lil Pump, The Weeknd,
---+------------------+------------------------------
 3 |https://ex3.com   | Meek Mill, Drake,

因此,每个播放列表网址都有许多标记符号。在我的函数中,由于这些标记首先存储为字符串,因此它们被转换为数组,最后一个元素被取消(基本上,添加逗号和空格会在每个数组的末尾添加一个空元素)。在此之后,用户可以搜索理想标签,然后将其转换为阵列,然后与存储的阵列进行比较。我的功能有效,但是如果两个播放列表网址都有一个共同的标记,例如" Drake"则会重复网址。 我的代码如下所示:

        $uploaded_tags = mysqli_query($this->con, "SELECT tags FROM apple_music");
        while($tag_array = mysqli_fetch_array($uploaded_tags)) {
            $uploaded_tags_array = explode(", ", $tag_array['tags']);
            array_pop($uploaded_tags_array);
            $searched_tags_array = explode(", ", $tags);
            array_pop($searched_tags_array);
            foreach($searched_tags_array as $value) {

                if(in_array($value, $uploaded_tags_array)) {
                    $result = mysqli_query($this->con, "SELECT * FROM apple_music WHERE tags LIKE '%$value%'");
                    while($row = mysqli_fetch_array($result)) {
                        echo $row['url'] . "<br />";
                    }

                }

            }
        }

如果标签&#34; The Weeknd&#34;搜索,然后将显示正确的输出: https://ex2.com

然而,如果&#34; Drake&#34;搜索,然后输出:

https://ex1.com
https://ex3.com
https://ex1.com
https://ex3.com`

我尝试过使用DISTINCT和GROUP BY,但它们不起作用。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我已检查过您的查询。它工作正常。问题出在你的foreach循环中。它为同一个标签运行两次。

SELECT * FROM apple_music WHERE tags LIKE '%$value%'