2012-03-29 4 views
1

행 번호를 ID로 반환 할 수 있습니까? 내가 행 번호를받을 때스핑크스 검색 결과에서 행 번호를 id로 사용

CREATE VIEW 
sphinx 
AS 
SELECT 

company.company_id, 
company.company_name, 
company.company_keywords, 

company_address.address_street, 
company_address.address_number, 
company_address.address_telephone, 
company_address.address_fax, 
company_address.address_email, 
company_address.address_website, 
company_address.address_authorized, 

company_contact.contact_name, 
company_contact.contact_surname, 
company_contact.contact_telephone, 
company_contact.contact_mobilephone, 
company_contact.contact_fax, 
company_contact.contact_email, 

company_page.page_content, 
company_page.page_description, 
company_page.page_keywords 

FROM company 
LEFT JOIN company_address ON company.company_id = company_address.company_id 
LEFT JOIN company_page ON company.company_id = company_page.company_id 
LEFT JOIN company_contact ON company.company_id = company_contact.company_id 

난 그냥 SELECT * FROM 수행 할 수 있습니다 내가 모든 값을 저장 조인 왼쪽 만들 필요가 있기 때문에 난 내 테이블을 병합 내보기에서 나는 고유 한 ID를 만들 수 없습니다 스핑크스 LIMIT 1 OFFSET rowNumber 해당 행의 정보를 가져옵니다.

감사합니다.

이 하나

, (select @rownum:=0) r 

이 선언하고 우리의 ROWNUMBER 될 것입니다 변수를 초기화 : 좀 더 설명하기 위해 :

답변

2

당신은 그것을

SELECT * FROM 
(
SELECT 
(@rownum:[email protected] + 1) as rownumber, q.* 
FROM (
SELECT 
* /*shortened for readability*/ 
FROM company 
LEFT JOIN company_address ON company.company_id = company_address.company_id 
LEFT JOIN company_page ON company.company_id = company_page.company_id 
LEFT JOIN company_contact ON company.company_id = company_contact.company_id 
, (select @rownum:=0) r 
) q 
) asdf 
WHERE rownumber BETWEEN 2 AND 3 /*or whatever*/ 

편집을 다음과 같은 방법을 수행 할 수 있습니다 . 을 내부 쿼리의 목록 인 SELECT에 포함 시키면 각 행에 값 0이있는 열을 얻을 수 있습니다.

그래서이 내부 쿼리를 하위 쿼리로 만들고 @rownum 변수에 1을 추가하면됩니다. 는이

SELECT 
(@rownum:[email protected] + 1) as rownumber, q.* 
FROM (
SELECT 
* /*shortened for readability*/ 
FROM company 
LEFT JOIN company_address ON company.company_id = company_address.company_id 
LEFT JOIN company_page ON company.company_id = company_page.company_id 
LEFT JOIN company_contact ON company.company_id = company_contact.company_id 
, (select @rownum:=0) r 
) q 

하면 이미 ROWNUMBER있을 것입니다. 당신이 WHERE 절에 열 별칭 rownumber을 참조 할 수 없습니다 때문에, 당신은

WHERE (@rownum:[email protected] + 1) BETWEEN 2 AND 3 /*or whatever*/ 

같은 것을 작성해야하지만 @rownum 변수가 다시 증가 얻을 것이기 때문에 이것은 잘못된 결과로 이어질 것이며, 당신의 ROWNUMBER는 것 같을 것

2 
4 
6 

등등. 따라서 다른 하위 쿼리에 넣어야하며 WHERE 절을 통해 쿼리를 "제한"할 수 있습니다.

기타 문의 사항이 있으십니까?

+0

정말 작동합니다 .. 감사합니다! 무슨 일이 일어나는지 설명해 주시겠습니까? – Sem

+0

@ Zundrium 내 답변을 수정했습니다. – fancyPants