我有一个页面,显示来自表 A 的公司名称及其详细信息。现在说我显示了一家公司,它的名称是“Company_one”,现在我想按字母顺序对下一家公司和上一家公司及其详细信息等进行排序。
我表中的数据未排序。它在获取数据时存储。
那么现在我应该写什么样的查询,它只给出一个前一个和一个下一个按字母排序的记录?请帮忙!!
我有一个页面,显示来自表 A 的公司名称及其详细信息。现在说我显示了一家公司,它的名称是“Company_one”,现在我想按字母顺序对下一家公司和上一家公司及其详细信息等进行排序。
我表中的数据未排序。它在获取数据时存储。
那么现在我应该写什么样的查询,它只给出一个前一个和一个下一个按字母排序的记录?请帮忙!!
在单个查询中没有很好的方法可以做到这一点。只需执行两个查询。
要获得上一个:
SELECT * FROM companies
WHERE name < variable_with_current_name
ORDER BY name DESC
LIMIT 1
要获得下一个:
SELECT * FROM companies
WHERE name > variable_with_current_name
ORDER BY name ASC
LIMIT 1
您需要使用sort 子句对表进行排序。的原型sort
是:
sort by fieldname
示例查询:
select * from your_table sort by company asc
如果要限制记录,请使用limit
子句:
select * from your_table sort by company asc limit 0, 1
根据多米尼克的回答,您可以通过将它们与WHERE
and组合使用单个查询来获得相同的结果OR
。
例如:
SELECT * FROM `companies`
WHERE (
`name` = IFNULL(
(SELECT `name` FROM `companies`
WHERE `name` < 'variable_with_current_name'
ORDER BY `name` DESC
LIMIT 1)
, 0)
OR
`name` = IFNULL(
(SELECT `name` FROM `companies`
WHERE `name` > 'variable_with_current_name'
ORDER BY `name` ASC
LIMIT 1)
, 0)
)
希望有帮助。