2012-03-29 18 views
1

行番号をIDとして返すことはできますか?私は行番号を受信するとSphinx検索の結果の行番号を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 その行の情報を取得します。

お時間をいただきありがとうございます。

この1

, (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*/ 

EDITを以下の方法を行うことができます。 を最も内側のクエリの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があろうから、これは、誤った結果につながりますbe like

2 
4 
6 

などです。したがって、別のサブクエリに配置する必要があります。次に、WHERE句を使用してクエリを「制限」できます。

他に質問がありますか?

+0

本当にうまくいきます。ありがとうございます!何が起こっているのかちょっと説明していただけますか? – Sem

+0

@ Zundrium私の答えを編集しました。 – fancyPants

関連する問題