질문이 있는데 이에 대한 해결책을 찾지 못했기 때문에 2 개의 테이블이 있습니다.
dosar
id name date fk_user fk_verificator
1 dosar 1 08/08/14 1 2
users
id name is_admin is_verificator
1 admin Y N
2 verificator N Y
fk_user는 사용자를 가리키는 외래 키이고, fk_verificator는 users 테이블을 가리키는 외래 키이기도합니다. 따라서 dosar에 대해 2 명의 사용자를 얻으려면 select를 만들어야합니다.
name date name is_admin is_verificator
dosar1 08/08/14 admin Y N
verificator N Y
내 질문 :
$uid = (int) $this->uri->segment(3, 0);
$this->load->database();
$get_dosar = $this->db->query("SELECT * FROM dosar,users WHERE
users.id = dosar.fk_user AND
users.id = dosar.fk_verificator
AND dosar.id_dosar = $uid");
사람들을 기쁘게 도와주세요.
이것은 최신 조인 구문을 사용합니다 (WHERE 절에 조인 조건을 넣지 않는 것이 좋습니다).
바이올린 : http://sqlfiddle.com/#!9/d6e60/2/0
select d.name, d.date, u.is_admin, u.is_verificator
from dosar d
join users u
on u.id = d.fk_user
or u.id = d.fk_verificator
where d.id = $uid
출력 (dosar의 ID # 1) :
| NAME | DATE | IS_ADMIN | IS_VERIFICATOR |
|---------|-------------------------------|----------|----------------|
| dosar 1 | August, 08 2014 00:00:00+0000 | Y | N |
| dosar 1 | August, 08 2014 00:00:00+0000 | N | Y |
이전 행과 동일한 NAME 또는 DATE의 값을 반복하지 않으려는 것 같습니다. 이는 SQL이 아닌 PHP로 수행되어야합니다.
항상 하나의 ID 만 선택하기 때문에 MySQL에서도 수행하는 것이 다소 간단합니다 (아래 참조).하지만 PHP에서 해당 부분을 수행하는 것이 좋습니다.
select case when rn = 1 then name end as name,
case when rn = 1 then date end as date,
is_admin,
is_verificator
from(select d.name, d.date, u.is_admin, u.is_verificator, @rw := @rw + 1 as rn
from dosar d
join users u
on u.id = d.fk_user
or u.id = d.fk_verificator
cross join (select @rw := 0) r
where d.id = 1) x
산출:
| NAME | DATE | IS_ADMIN | IS_VERIFICATOR |
|---------|-------------------------------|----------|----------------|
| dosar 1 | August, 08 2014 00:00:00+0000 | Y | N |
| (null) | (null) | N | Y |
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다