我正在尝试制作一些内容,以回显播放列表标签列表的网址。请允许我展示我的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,但它们不起作用。有什么想法吗?
答案 0 :(得分:0)
我已检查过您的查询。它工作正常。问题出在你的foreach循环中。它为同一个标签运行两次。
SELECT * FROM apple_music WHERE tags LIKE '%$value%'