3

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

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

最初我有(例如“以前的”):

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 的行开始查询,这可能吗?

4

3 回答 3

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 子句的动态,就可以了。

感谢大家的投入!

于 2012-10-17T09:10:10.157 回答
0

您应该存储显示的行号,而不是 ID。然后按照您的应用程序要求在 SQL 中进行排序,然后应用此处包含的知识:

在 MySQL 中跳过前 n 个结果

为了简化工作,并使这个答案可用于未来的 SO 居民:

SELECT ed.id 
FROM entity_details AS ed, users 
WHERE ed.typeRef = ? 
AND ed.ownerRef = users.id 
$filter 
$SQLOrder 
LIMIT $currentRowNum,1

然而,这种方案有异味:使用它来导航您的行意味着每个导航操作都有一个 SQL 查询。这可能会对您的响应时间产生不良影响...

于 2012-10-17T07:24:56.947 回答
0

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

mysql_data_seek

于 2012-10-17T07:46:52.097 回答