我很难想出一个好的解决方案来处理从SQL(Postgres 8.4)检索数据并在jqGrid中显示它。关注的表格有:meta
(“主”表)。。。
+--------------------------------+
| id | metaname | metavalue |
+--------------------------------+
| 1 | host | www.google.com |
| 2 | ip | 8.8.8.8 |
+--------------------------------+
metauser
(已加入metausedby…)。。。+---------------+
| id | metauser |
+---------------+
| 1 | Tool 1 |
| 2 | Tool 2 |
| 3 | Tool 3 |
+---------------+
metausedby
(一个只包含元id和元用户id的关系表)。。。+--------------------------+
| id | metaid | metauserid |
+--------------------------+
| 1 | 1 | 2 |
| 2 | 2 | 1 |
| 3 | 2 | 3 |
+--------------------------+
正如您在
meta
中看到的,metausedby
:metausedby
的关系是一对多。所以我的查询返回。。。 +------------------------------------------------------------+
| id | metaname | metavalue | metauserid | metausername |
+------------------------------------------------------------+
| 1 | host | www.google.com | 2 | Tool 2 |
| 2 | ip | 8.8.8.8 | 1 | Tool 1 |
| 2 | ip | 8.8.8.8 | 3 | Tool 3 |
+------------------------------------------------------------+
那么,我可以/应该如何处理构建jqGrid
select
(multi)字段来显示metauserid
/metausername
的多种可能性呢?在以前的网格中,我构建的数据几乎完全是用PHP处理的——一个函数调用来查询,然后操作JSON来构建jqGridselect
字符串(在必要时将多个记录转换为一个),但我不喜欢这种方法,也不认为它对这个特定的网格非常有用。可能我的查询不太理想,可以在那里处理,也可能很容易在Javascript/jQuery中处理(这两个方面我都不擅长,这就是为什么我以前非常依赖PHP数据处理)。
目标是要有一个网格沿着。。。
+---------------------------------------+
| Meta Name | Meta Value | Used By |
+---------------------------------------+
| host | www.google.com | Tool 2 |
+---------------------------------------+
| ip | 8.8.8.8 | Tool 1 |
| | | Tool 2 |
| | | Tool 3 |
+---------------------------------------+
请注意,在上面的示例网格中,工具2不会实际显示;在表单中,编辑将显示所有工具,包括工具2,并选择工具1和3(如果数据设置正确,jqGrid应该自动执行此操作)
当格式编辑时,
Used By
字段需要是一个select
(多)字段,显示从metauser
中的所有“工具”,理想情况下,当编辑现有记录时,将选择合适的工具。我当前的查询。。。
WITH paged AS
(
SELECT
meta.id as metaid,
metaname,
metavalue,
metauser.id as usedby,
ROW_NUMBER() OVER (ORDER BY ' . $orderBy . ') AS rowNumber
FROM meta
LEFT JOIN metausedby ON metausedby.metaid = meta.id
LEFT JOIN metauser ON metauser.id = metausedby.metauserid
)
SELECT
metaid,
metaname,
metavalue,
usedby
FROM paged
WHERE rowNumber BETWEEN ' . $start . ' AND ' . $end . ';';
我的
usedby
字段在jqGrid的colModel
中定义如下: {
name: 'usedby',
index: 'usedby',
editable: true,
editoptions:
{
multiple: true,
size: "<?php echo $metaUserCount; ?>",
value: "<?php echo $metaUserString; ?>"
},
edittype: 'select'
}
当然,这会在编辑表单中显示
select
字段(并为给定记录选择适当的工具),但是由于JSON(如上面查询的示例输出中突出显示的那样),我有两个独立的meta
ID 2记录。。。一个用于1号工具,另一个用于2号工具。要考虑可能影响解决方案的一个因素是我在这个网格中使用的服务器端分页。
对于比我更精通SQL和jQuery/jqGrid的人来说,这可能非常简单,所以我感谢您的耐心和帮助。最后一条评论是,我的网格除了排序如何处理这件事之外,还能工作。
谢谢您。
最佳答案
我的解决方案是,一旦我有了本地的数据,就循环遍历它以根据需要更改数据,并将loadonce和数据类型动态地操作为适应所有必要的功能。