MySQL记得最后的位置

时间:2012-10-17 07:20:28

标签: php mysql ajax sql-order-by

我制作了一个小应用程序,其中向用户呈现数据表。数据可以按不同的列标题排序,并使用输入进行过滤。

当用户点击一行时,它会打开一个小弹出窗口,其中包含两个箭头,用于转到下一个和上一个记录,顺序与它们在表格中显示的顺序相同。

最初我曾(以“之前的”为例):

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。

FYI $过滤器可能类似于:

AND branchRef = 2

和$ SQLOrder可能是:

ORDER BY ed.name DESC

我需要做些什么才能让它正确地循环记录,尊重当前的订单和记录位置?


所有排序和过滤参数都通过AJAX进行,例如:

$JSON->selectedbranch ;

我得出的结论是,我需要知道的是如何从列X包含值Y的行开始查询,这可能吗?

3 个答案:

答案 0 :(得分:0)

您应该存储您显示的行号,而不是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查询。这可能会对您的响应时间产生不良影响......

答案 1 :(得分:0)

PHP的mysql_data_seek功能可能会有所帮助。

mysql_data_seek

答案 2 :(得分:0)

我找到了它,看到其他人的回答给了我一个想法,但他的回答已经消失了:(

我有下一个按钮:

$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子句的动态,它就会很好。

感谢每一个输入!