, 나는 보통의 MySQL에서 그들을 실행 해보십시오. 정확한 SQL 문을 찾으면 Zend로 '번역'하기 시작합니다. 조금 복잡해 보이지만 장기적으로는 Zend에서 바로 할 수 있습니다. 여기 어떻게 부숴 버릴까요? SQL 문이 무엇인지 첫 번째 그림 아웃 :
SELECT t.plural_name, p.name as users_name, u.ID
FROM users u, profile p, relationships r, relationship_types t
WHERE t.ID=r.type AND r.accepted=1 AND
(r.usera={$user} OR r.userb={$user}) AND
IF(r.usera={$user},u.ID=r.userb,u.ID=r.usera) AND
p.user_id=u.ID
지금, 당신은에 조인 모든 관계를 변환 할 것입니다. 조인은 처음에는 다소 무서운 것이지만 조인하는 테이블과 조건을 한 줄에 다른 테이블에 넣는 단순한 방법입니다.
$select = $this->select()->setIntegrityCheck(false);
$select->from(array('u'=>'users'), '');
$select->join(array('p'=>'profile'), 'p.user_id = u.ID', '');
$select->join(array('r'=>'relationships'), 'IF(r.usera={$user}, u.ID=r.userb, u.ID=r.usera)', '');
$select->join(array('t'=>'relationship_types'), 't.ID = r.type', '');
$select->columns(array(
't.plural_name',
'users_name'=>'p.name',
'u.ID'));
$select->where('r.usera={$user}');
$select->orWhere('r.userb={$user}');
$select->where('r.accepted=1');
을 그리고 그 작업을 수행해야합니다
SELECT t.plural_name, p.name AS users_name, u.ID
FROM users u
INNER JOIN profile AS p ON p.user_id = u.ID
INNER JOIN relationships AS r ON IF(r.usera={$user}, u.ID=r.userb, u.ID=r.usera)
INNER JOIN relationship_types AS t ON t.ID = r.type
WHERE
(r.usera={$user} OR r.userb={$user}) AND
r.accepted=1
지금은 더 '젠드 친화적'방식으로 작성되어 있음을 쉽게 젠드로 변환 시작할 수 있습니다.
$ select-> where ('r.usera = {$ user}'); $ select-> join (array ('r'=> '관계'), 'IF (r.usera = {$ user}, u.ID = r.userb, u.ID = r.usera)', ''); 이 두 부분이 중복되지 않습니까? – Yangrui