여러 필드를 포함하는 필드 쿼리
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
'programing' 카테고리의 다른 글
[Object Object]의 의미는 무엇입니까? (0) | 2023.08.30 |
---|---|
jQuery를 사용하여 너비를 백분율로 설정 (0) | 2023.08.30 |
SQLAlchemy를 사용하여 MySQL에서 db를 만드는 방법은 무엇입니까? (0) | 2023.08.30 |
MariaDB 이달의 첫째 날 찾기 및 UTC로 변환 (0) | 2023.08.30 |
GET 인수가 없는 요청 문자열 (0) | 2023.08.30 |