我制作了一个小应用程序,其中向用户呈现数据表。数据可以按不同的列标题排序,并使用输入进行过滤。
当用户点击一行时,它会打开一个小弹出窗口,其中包含两个箭头,用于转到下一个和上一个记录,顺序与它们在表格中显示的顺序相同。
最初我曾(以“之前的”为例):
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的行开始查询,这可能吗?
答案 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
功能可能会有所帮助。
答案 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子句的动态,它就会很好。
感谢每一个输入!