我需要从MariaDB源查询表。
有一个字段包含以逗号分隔的多个值,我不知道如何继续。
情况就是这样:
TABLE: Aphorisms_Categories
Field: id
与
有关TABLE: Aphorisms
Field: categories
问题是类别通常包含2,3,4,67等字符串。
原始开发者,我不知道为什么,决定不创建第三个表来代表N-M关系。但是现在,对我来说,找不到属于类别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技巧,而是提供一个良好,可靠的数据库设计。就像你在问题中提出的一样。
祝你好运!