홈>
관련 필드가있는 3 개의 테이블이 있습니다
게시물(ID, 제목)
태그(ID, 이름)
tags_map(id, id_post, id_tag)
이렇게 노력하고 있습니다 :
$this->db->select('posts.*,tags.name');
$this->db->from('posts');
$this->db->join('tags_map', 'tags.id_post = posts.id');
$this->db->join('tags', 'tags.id = tags_map.id_tag');
$this->db->group_by('posts.id'); // I can comment this line and same result
이것처럼 보이지만 하나 이상의 tags_map 레코드가 있더라도 하나만 반환합니다.
한 번의 쿼리로 모두 반환하려면 어떻게합니까?
-편집-
어떻게 해결했지만 PHP 처리가 필요합니다
$this->db->select('posts.*,group_concat(tags.name) as thetags');
이것은 필드 thethags = 'tag1, tag2, tag3'을 다시 실행합니다
그러나 tags 테이블에서 다른 파일을 받고 싶습니다 ..
예를 들면 다음과 같습니다.
$this->db->select('posts.*,group_concat(tags.name) as 'thetags',group_concat(tags.relevance) as 'therelevances');
주문을 신뢰할 수 있는지 확실하지 않습니까?
- 답변 # 1
- 답변 # 2
이것과 같이 쿼리되어야한다고 생각합니다
$this->db->select('p.*,group_concat(t.name order by t.id) as thetags, group_concat(t.relevance order by t.id) as therelevances'); $this->db->from('posts p'); $this->db->join('tags_map tm', 't.id_post = p.id'); $this->db->join('tags t', 't.id = tm.id_tag'); $this->db->group_by('p.id');
결합을 사용할 때 일대 다 관계를 사용해야합니다.이 경우 tags_map 테이블은 게시물 및 태그 테이블과 다 대일 관계를 제공하는 접합 테이블 역할을합니다
- 답변 # 3
아래 시도 코드 :
$this->db->select('posts.*, tags.name'); $this->db->from('tags_map'); &this->db->join('posts', 'tags_map.id_post = posts.id'); $this->db->join('tags', 'tags_map.id_tag = tags.id');
$this->db->select('pt.*,group_concat(tg.name order by tg.id) as thetags,group_concat(tg.relevance order by tg.id) as therelevances'); $this->db->from('posts pt'); $this->db->join('tags_map tm', 'tg.id_post = pt.id'); $this->db->join('tags tg','tg.id =tm.id_tag'); $this->db->group_by('pt.id');
관련 자료
- oracle - 월 및 연도에 대한 SQL 쿼리
- java - 향상된 For 루프 쿼리
- php - 날짜 및 시간별 라 라벨 쿼리
- 파이썬에서 사용하고 함께 사용하는 방법
- REST API Get and Post 적절한 것을 선택해야 할 때
- xml - bash에서 변수로 게시물 쿼리를 보내야합니까?
- wordpress - 사용자 정의 게시물 유형 루프에서 게시물 태그를 클래스로 추가하는 방법은 무엇입니까?
- 델파이 인디 포스트 인코딩 및 PHP
- java - 객체 데이터 유형에 POST를 수행하는 방법은 무엇입니까?
- angular - File 및 FormGroup을 API에 게시하는 방법이 있습니까?
- mysql - 조인 테이블에 대한 느린 쿼리
- java - JPQL에서 지난 X 개월 동안 데이터를 가져 오는 쿼리
- c# - 면도칼 - url 매개 변수 및 양식 데이터 게시
- reactjs - JSX의 중첩 된 태그, 변수 및 텍스트
- SQL Lag 및 LEAD 쿼리
- sql server - 보기를 만들기 위해 SQL 쿼리를 수정해야합니다
- sql server - SQL보기에 대한 쿼리 수정
- mysqli - SQL은 게시 날짜 및 시간을 8 시간 단축
- python - 명령 및 특정 요일 실행 명령에 대한 냉각
- python - For 루프 및 이름으로 선택
관련 질문
- php : '필드 목록'에 알 수 없는 열 'admin_clients.org_password'가 있지만 필드는 존재합니다.
- php : code이그나이터에서 하나씩 실행할 수 없는 여러 쿼리 실행
- PHP에서 매분마다 새 레code를 mysql 행에 자동으로 보내는 방법
- mysql : 3개의 SQL 쿼리를 하나로 결합
- php : 준비된 명령문에서 테이블 이름을 매개변수화할 수 있습니까?
- PHP 스크립트를 사용하여 JSON 형식의 MySQL 테이블 데이터를 얻으려면 어떻게 해야 합니까?
- php : foreach를 가져오는 동안 DATETIME FORMAT 변경
- 데이터베이스 php mysql의 테이블에서 데이터 선택
- lastInsertId를 재설정하는 PHP foreach가 루프를 끊습니다.
- PHP 치명적인 오류: 잡히지 않은 ArgumentCountError
당신이
group_concat
에 가지 않으면더 좋습니다 솔루션은 문자 길이로 인해 신뢰할 수 없기 때문에 연결하는 데 기본적으로 1024 자로 제한되지만 수동으로 정의 된 증가 할 수는 있지만 정의 된 한계에 완전히 의존 할 수는 없지만 대신 응용 프로그램 계층 (php)에서 처리 할 수 있습니다 데이터를 가져오고 있으며 게시물 및 관련 태그를 표시하려는 곳에서는 게시물별로 순서대로 조인 쿼리를 계속 사용할 수 있습니다. 이제 각 게시물에 둘 이상의 태그가있을 수 있으므로 각 게시물 행으로 인해 결과 세트에 중복 게시물 데이터가 있습니다. 하나의 태그가 있고 동일한 게시물의 다른 행에 두 번째 태그가 있으므로 결과를 반복 할 때 약간의 확인을 추가하여 각 게시물을 한 번만 표시합니다
위의 쿼리에서
t.*
를 추가했습니다. 루프$currentParent
에서 모든 게시물과 관련 태그를 선택하려면 동일한 게시물이 루프 검사에서 이전 게시물 ID를 가지며 조건이 false를 반환하면 태그를 표시 한 다음 마크 업 (h1)을 사용하여 새 게시물 표시 게시물 제목을 표시합니다. 두 테이블에서 모든 열을 선택했지만 필요한 항목 만 추가해야합니다 태그 테이블의 열 및 게시물 및 태그 테이블의 이름이 같은 열인 경우 쿼리에서 다른 별칭으로 정의 된 열결과 마크 업은 다음과 같습니다
데이터를 표시하지 않고 다른 곳 (웹 서비스)에서 데이터를 사용하는 경우 하나의 조인 된 쿼리를 사용하고 각 게시물에 아래와 같은 관련 태그의 배열이있는 배열/객체를 만들어 데이터를 변환하십시오
다른 방법으로추천하지 않음게시물을 가져오고 루프에서 태그를 가져 와서 쿼리를 실행하여 태그를 가져옵니다.이 솔루션은 작동하지만 원치 않는 쿼리가 포함되어 추가 쿼리가 실행됩니다. 각 게시물.
이제
group_concat
를 고수하고 싶다면 귀하의 질문에 답변하는 방법I'm not sure if I can trust the order?
또한order by
를 추가 할 수있는 방법이 있습니다 와이즈 비즈 결과로 연결된 태그가 주문되도록하고 두 번째 열에는 동일한 주문 기준을 지정할 수 있습니다