查询包含多个字段的字段

时间:2017-07-18 09:15:00

标签: php mysql mariadb

我需要从MariaDB源查询表。

有一个字段包含以逗号分隔的多个值,我不知道如何继续。

情况就是这样:

TABLE: Aphorisms_Categories
Field: id 

有关
TABLE: Aphorisms
Field: categories

问题是类别通常包含2,3,4,67等字符串。

原始开发者,我不知道为什么,决定不创建第三个表来代表N-M关系。但是现在,对我来说,找不到属于类别3的所有格言的方法是不可能的(例如)。

任何提示?

3 个答案:

答案 0 :(得分:0)

你可以使用这样的东西:

SELECT * FROM Aphorisms WHERE categories LIKE '%,3,%

这样就可以了。

PS:有时候,开发人员不希望有太多的关系,所以倾向于集中精力。有时它很有用,有时候不是,就像你的情况一样。

答案 1 :(得分:0)

Shirkam的答案很接近,但有一个问题:

如果3是该字段中的第一个或最后一个类别,即' 2,4,33,3', SELECT * FROM Aphorisms WHERE categories LIKE '%,3,%' 不会抓住它。如果您从LIKE子句中删除逗号,那么您将在多位数类别上获得误报。

由于您使用MariaDB,因此使用: SELECT * FROM Aphorisms WHERE categories REGEXP '(^|,)3($|,)'

答案 2 :(得分:0)

唯一一个好的解决方案只能是你作为优秀程序员的责任:不仅提供良好的PHP代码,而且提供良好的数据库设计。你现在有这个责任,而不再是前开发者。

所以,我的建议不是尝试应用find-category-id技巧,而是提供一个良好,可靠的数据库设计。就像你在问题中提出的一样。

祝你好运!

相关问题