我很難提出一個很好的解決方案來處理從SQL(Postgres 8.4)檢索數據並在jqGrid中顯示它。關注的表是:jqGrid JSON與SQL JOIN
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
(多)字段中顯示的metauserid
/metausername
的多種可能性?在以前的網格中,我構建的數據幾乎完全由PHP處理 - 一個函數調用來查詢並操縱JSON來構建jqGrid select
字符串(必要時將多個記錄合併成一個),但我不喜歡這種方法,也不喜歡我認爲這個網格非常有用。
也許我的查詢不夠理想,它可以在那裏處理,或者這可以很容易地在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的人來說,這可能相當簡單,因此我非常感謝您的耐心和協助。最後一條評論,我的網格除排序如何處理這個問題外。
謝謝。