MySQL记住最后一个位置
Posted
技术标签:
【中文标题】MySQL记住最后一个位置【英文标题】:MySQL remember last position 【发布时间】:2012-10-07 09:41:45 【问题描述】:我制作了一个小应用程序,其中向用户显示了一个数据表。数据可以按不同的列标题排序,并使用输入进行过滤。
当用户点击一行时,它会打开一个小弹出窗口,其中包含两个箭头,用于转到下一条和上一条记录,其顺序与它们在表格中出现的顺序相同。
最初我有(例如“以前”):
SELECT ed.id
FROM entity_details AS ed, users
WHERE ed.id > ?
AND ed.typeRef = ?
AND ed.ownerRef = users.id
$filter
$SQLOrder LIMIT 1
如果表格按 ed.id 排序,这可以正常工作,但如果按另一列排序,则无法正常工作,例如ed.name,因为下一个字母名称可能有更高或更低的 id。
仅供参考 $filter 可能类似于:
AND branchRef = 2
$SQLOrder 可以是:
ORDER BY ed.name DESC
在尊重当前顺序和记录位置的情况下,我需要做什么才能使其正确循环记录?
所有的排序和过滤参数都通过 AJAX 来实现,例如:
$JSON->selectedbranch ;
我得出的结论是,我只需要知道如何从 X 列包含值 Y 的行开始查询,这可能吗?
【问题讨论】:
为什么你的 $SQLOrder 起过滤作用而不是排序作用? 我不确定,但你能告诉我你的排序代码在哪里吗?因为,如上所述,您的 $SQLOrder 只是ed.name
的另一个过滤
【参考方案1】:
您应该存储显示的行号,而不是 ID。然后只需按照您的应用程序要求在 SQL 中进行排序,然后应用此处包含的知识:
Skipping first n results in mysql
为了简化工作,并使这个答案对未来的 SO 居民有用:
SELECT ed.id
FROM entity_details AS ed, users
WHERE ed.typeRef = ?
AND ed.ownerRef = users.id
$filter
$SQLOrder
LIMIT $currentRowNum,1
但是,这种方案有异味:使用它来导航您的行意味着每个导航操作都有一个 SQL 查询。这可能会对您的响应时间产生不良影响...
【讨论】:
我相信限制条款是:LIMIT $currentRowNum, 1
。定义为LIMIT [offset,] row_count
如何获取行号而不是 ID 等其他内容?
@imperium2335 您应该“牢记在心”...我不熟悉您的应用程序,但我想我会使用 javascript 变量来存储它,并将其作为执行查询的 php 脚本的参数。鉴于使用了 Ajax,它有可能毫无困难地工作。如果您想在“真实”导航操作之间保留其状态,则必须注意这一点。【参考方案2】:
PHP 的 mysql_data_seek
函数可能会有所帮助。
mysql_data_seek
【讨论】:
【参考方案3】:我找到了,看到其他人的回答给了我一个想法,但他的回答消失了:(
对于下一个按钮,我有:
$result = $dbh->prepare("SELECT ed.id
FROM entity_details AS ed, users
WHERE $WHERE < ?
AND ed.typeRef = ?
AND ed.ownerRef = users.id
$filter
ORDER BY ed.name DESC LIMIT 1") ;
$WHERE 只是列名“ed.name”。
我只需要理清 $where 和 ORDER BY 子句的动态就可以了。
感谢大家的投入!
【讨论】:
以上是关于MySQL记住最后一个位置的主要内容,如果未能解决你的问题,请参考以下文章
带有ListView的Android ViewPager在调用notifyDatasetchanged时无法记住最后一个位置
python 让plt.show记住最后一个数字位置和上一次的情节。