programing

여러 필드를 포함하는 필드 쿼리

bestprogram 2023. 8. 30. 21:52

여러 필드를 포함하는 필드 쿼리

MariaDB 소스에서 테이블을 쿼리해야 합니다.

쉼표로 구분된 여러 값이 포함된 필드가 있는데 어떻게 진행해야 할지 모르겠습니다.

상황은 이렇습니다.

TABLE: Aphorisms_Categories
Field: id 

에 관련된.

TABLE: Aphorisms
Field: categories

문제는 범주에 2, 3, 4, 67과 같은 문자열이 포함되어 있다는 것입니다.

왜 그런지 모르겠지만, 원래 개발자는 N-M 관계를 나타내는 세 번째 테이블을 만들지 않기로 결정했습니다.하지만 이제 저는 카테고리 3에 속하는 모든 격언을 검색하는 방법을 찾는 것이 불가능합니다(예를 들어).

힌트?

Shirkam의 대답은 가깝지만 한 가지 문제가 있습니다.

3이 필드의 첫 번째 또는 마지막 범주, 즉 '2,4,33,3'인 경우,SELECT * FROM Aphorisms WHERE categories LIKE '%,3,%'못 잡겠어요.그리고 LIKE 절에서 쉼표를 제거하면 여러 자리 범주에서 잘못된 긍정을 얻을 수 있습니다.

MariaDB를 사용하고 있으므로 다음을 사용합니다.SELECT * FROM Aphorisms WHERE categories REGEXP '(^|,)3($|,)'

다음과 같은 방법을 사용해야 합니다.

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

이 정도면 효과가 있을 겁니다.

PS: 때때로, 개발자들은 너무 많은 관계를 맺고 싶지 않아서, 그들은 일에 집중하는 경향이 있습니다.때로는 유용하지만, 때로는 그렇지 않습니다.

유일한 좋은 해결책은 좋은 프로그래머로서의 책임에 의해 부과되는 것일 수 있습니다: 좋은 php 코드뿐만 아니라 좋은 데이터베이스 설계도 제공하는 것입니다.당신은 이제 이전 개발자가 아니라 이 책임을 져야 합니다.

따라서 제가 추천하는 것은 find-category-id 트릭을 적용하려는 것이 아니라 우수하고 견고한 데이터베이스 설계를 제공하는 것입니다.당신이 질문에서 이미 제안한 것처럼.

행운을 빕니다.

언급URL : https://stackoverflow.com/questions/45162418/querying-fields-containing-multiple-fields