PHP MySQL 使用标签显示相关项目

发布于 2024-11-17 08:55:15 字数 796 浏览 1 评论 0原文

我想使用标签显示类似的项目。

我的项目表以 itemiditemnameitemtagids 作为列。 itemtagids 具有 CSV 标签 ID。

假设在 itemid 1 中,我有 3 个标签 id 1,2,3,在 itemid 2 中,我有 4 个标签 id 3, itemid 3 中的 4,5,6 我有 2 个标签 ID 2,3 等等..

我想要 itemid 1代码> 类似项目中的第 3 个itemid 应该首先显示(因为它有 2 个匹配),然后是 itemid 2 等等。

我使用的是:

SELECT itemid 
FROM items 
WHERE MATCH (itemtagids ) AGAINST ('2823' IN BOOLEAN MODE)

它仅在存在的情况下返回结果是 itemtags ids 列中的一个 itemtagid

序列是谎言: 234,546,2823,342,5643 所以,这里 2823 不是一个单独的单词,而是来自 234,54...43 的完整字符串,

在这种情况下应该做什么,标签是以 ids 形式和 CSV 格式。

I want to show similar items using tags.

I have items table with itemid, itemname and itemtagids as columns. itemtagids has CSV tag ids.

Say in itemid 1, I have 3 tag ids 1,2,3 and in itemid 2 I have 4 tag ids 3,4,5,6 in itemid 3 I have 2 tag ids 2,3 and so on..

I want that for itemid 1 in similar items 3rd itemid should be shown first (because it has 2 matching) then itemid 2 and so on..

What i have used is:

SELECT itemid 
FROM items 
WHERE MATCH (itemtagids ) AGAINST ('2823' IN BOOLEAN MODE)

it does return results only in the case when there is one itemtagid in itemtags ids column.

sequence is something lie: 234,546,2823,342,5643 So, here 2823 is not an individual word but a complete string from 234,54...43

what should be done in this case where tags are in the form of ids and in CSV format.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

彻夜缠绵 2024-11-24 08:55:15

似乎全文搜索不适合您的案例。尝试改用正则表达式。

SELECT `itemid`
FROM `items`
WHERE `itemtagids` REGEXP '^2823

编辑:或者也许您可以使用单个正则表达式,例如:

SELECT `itemid`
FROM `items`
WHERE `itemtagids` REGEXP '[[:<:]]2823[[:>:]]';

希望它有帮助!

OE `itemtagids` REGEXP '^2823,' OR `itemtagids` REGEXP ',2823

编辑:或者也许您可以使用单个正则表达式,例如:


希望它有帮助!

OR `itemtagids` REGEXP ',2823,';

编辑:或者也许您可以使用单个正则表达式,例如:

希望它有帮助!

It seems a FULLTEXT isn't the right search for your case. Try using regular expressions instead.

SELECT `itemid`
FROM `items`
WHERE `itemtagids` REGEXP '^2823

EDIT: or perhaps you might do with a single regular expression, like:

SELECT `itemid`
FROM `items`
WHERE `itemtagids` REGEXP '[[:<:]]2823[[:>:]]';

Hope it helps!

OE `itemtagids` REGEXP '^2823,' OR `itemtagids` REGEXP ',2823

EDIT: or perhaps you might do with a single regular expression, like:


Hope it helps!

OR `itemtagids` REGEXP ',2823,';

EDIT: or perhaps you might do with a single regular expression, like:

Hope it helps!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文