2014-06-25 23 views
2

我很難提出一個很好的解決方案來處理從SQL(Postgres 8.4)檢索數據並在jqGrid中顯示它。關注的表是:jqGrid JSON與SQL JOIN

  1. meta( 「主」 表)...

    +--------------------------------+ 
    | id | metaname | metavalue  | 
    +--------------------------------+ 
    | 1 | host  | www.google.com | 
    | 2 | ip  | 8.8.8.8  | 
    +--------------------------------+ 
    
  2. metauser(加入到metausedby)...

    +---------------+ 
    | id | metauser | 
    +---------------+ 
    | 1 | Tool 1 | 
    | 2 | Tool 2 | 
    | 3 | Tool 3 | 
    +---------------+ 
    
  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的人來說,這可能相當簡單,因此我非常感謝您的耐心和協助。最後一條評論,我的網格除排序如何處理這個問題外。

謝謝。

回答

0

我的解決方案是,一旦我有本地數據,就可以循環遍歷它,根據需要更改數據,並動態調整loadonce和數據類型以適應所有必需的功能。