gpt4 book ai didi

mysql - Sphinx 搜索结果中的行号作为 id

转载 作者:行者123 更新时间:2023-11-29 07:01:36 25 4
gpt4 key购买 nike

是否可以将行号作为 ID 返回?在我合并表的 View 中,我无法创建唯一 ID,因为我需要创建 left加入以存储每个值:

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 sphinx LIMIT 1 OFFSET rowNumber获取该行的信息。

感谢您的宝贵时间。

最佳答案

可以通过以下方式实现

SELECT * FROM
(
SELECT
(@rownum:=@rownum + 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 @rownum:=0) r

声明并初始化将用作行号的变量。如果您将 @rownum 包含在最内层查询的 SELECT 列表中,您将得到一个列,其每行的值为 0。

因此,您将此内部查询设为子查询,并将 1 添加到 @rownum 变量。只有这个

SELECT 
(@rownum:=@rownum + 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

您已经有了行号。由于您不能在 WHERE 子句中引用列别名 rownumber,因此您必须编写如下内容

WHERE (@rownum:=@rownum + 1) BETWEEN 2 AND 3 /*or whatever*/

但这会导致错误的结果,因为 @rownum 变量会再次递增,你的行号会像

2
4
6

等等。因此,您必须将它放在另一个子查询中,然后您可以通过 WHERE 子句“限制”您的查询。

还有问题吗?

关于mysql - Sphinx 搜索结果中的行号作为 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9923319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com