簡體   English   中英

通過SQL JOIN的jqGrid JSON

[英]jqGrid JSON WIth SQL JOIN

我很難找到一個很好的解決方案來處理從SQL(Postgres 8.4)檢索數據並將其顯示在jqGrid中的問題。 關注的表是:

  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 | +--------------------------+ 

正如您在metausedby可以看到的, metametausedby的關系是一個:很多。 所以我的查詢返回...

    +------------------------------------------------------------+
    | 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來構建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  |
    +---------------------------------------+

請注意,在上面的示例網格中,Tool 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和數據類型,以適應所有必需的功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM