如何获得相关帖子比较他们的json标签

时间:2018-05-30 08:48:12

标签: php mysql json

我希望将4相关帖子与当前帖子进行比较,比较他们的标签。

每个帖子的标签数量可能会有所不同,但最大值为5;

标签作为数组存储在JSON列中,如下所示:

["ABBA","SKY","BERN"]  
["ALPHA","SKY","SEA", "ABBA"]  
["VENUS","EARTH"]
["ABBA","AMSTEL"]

现在假设当前帖子有这个标签:

["ABBA","SKY","BERN"] // row-id = 0

我希望得到row id相关标签。

在上面的示例中,结果应为:

row-id = 1 // because of `SKY` and `ABBA`;  
row-id = 3 // because of `ABBA`;

... ans等等,直到4个相关行被选中,按date desc排序。

这样的事情:

select id, img, tags from posts
where id <> $currentId
and tags contains any of $current_tags
limit 4
order by date desc.

任何帮助?

2 个答案:

答案 0 :(得分:0)

你可以选择这样的选择:

preprod-master
preprod-proxy

在PHP中:

SELECT id, img, tags FROM posts
WHERE tags LIKE '%"ABBA"%' OR tags LIKE '"%SKY%"' OR tags LIKE '"%BERN%"'
LIMIT 4
ORDER BY date DESC;

其中:

$query = "SELECT id, img, tags FROM posts
WHERE tags LIKE '%".implode("%' OR tags LIKE '%", $yourInputArray)."%'
LIMIT 4
ORDER BY date DESC;";

答案 1 :(得分:0)

由于您将拥有最多5个标签,并且假设JSON_SEARCH可用,您可以尝试以下方法,但它有点长。

如果0到4索引中的任何一个不存在,JSON_SEARCH将返回null。

    SELECT id, img, tags 
    FROM posts
    WHERE (JSON_SEARCH(@current_tags, 'one', tags ->> '$[0]') is not null
    OR JSON_SEARCH(@current_tags, 'one', tags ->> '$[1]') is not null
    OR JSON_SEARCH(@current_tags, 'one', tags ->> '$[2]') is not null
    OR JSON_SEARCH(@current_tags, 'one', tags ->> '$[3]') is not null
    OR JSON_SEARCH(@current_tags, 'one', tags ->> '$[4]') is not null)
    LIMIT 4
    ORDER BY DATE desc;