2017-07-18 39 views
1

我需要从MariaDB源查询表。查询包含多个字段的字段

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

这就是这种情况:

TABLE: Aphorisms_Categories 
Field: id 

TABLE: Aphorisms 
Field: categories 

问题相关的是,类别通常包含一个字符串如2,3,4,67

最初的开发者,我不知道为什么,决定不创建第三张表来表示新墨西哥关系。但是现在,对我来说,找出一种方法来检索属于类别3的所有格言是不可能的(例如)。

任何提示?

+0

它仍然是一个选项,添加额外的表并将值存储在那里?也许使用触发器在额外的表中插入/更新这些值,同时保持您的php代码大部分为 –

+0

_有一个字段包含由逗号分隔的多个值声音像一个糟糕的设计或只是错误的数据库 – Clijsters

回答

0

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

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

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

0

您使用前人的精力是这样的:

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

这将这样的伎俩。

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

0

唯一的一个很好的解决办法只能是一个通过你的责任强加作为一个好的程序员:不仅提供了良好的PHP代码,但也是一个很好数据库设计。你现在有这个责任,不再是以前的开发者。

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

祝你好运!

+0

对于downvote (d)我的问题:请让我知道您的降薪动机,以便我可以相应地更改我的答案。这样我们可以共同为本网站的持续改进做出贡献。 – 2017-07-18 10:24:04

+0

不幸的是,我不能做你的建议。数据库是我拥有的数据库,我无法更改它。 –