#jquery #postgresql #jqgrid
#jquery #postgresql #jqgrid
Вопрос:
У меня возникли трудности с поиском хорошего решения для обработки извлечения данных из 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
(реляционная таблица, содержащая только идентификаторы meta и идентификаторы metauser)…-------------------------- | 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 для построения select
строки jqGrid (при необходимости превращая несколько записей в одну), но мне не понравился этот подход, и я не думаю, что он очень удобен для этой конкретной сетки.
Возможно, мой запрос не идеален, и его можно было бы обработать там, или, может быть, это можно легко обработать в 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
идентификатора 2 … одна для инструмента 1, а другая для инструмента 2.
Следует учитывать фактор, который может повлиять на решение, — это подкачка страниц на стороне сервера, которую я использую с этой сеткой.
Вероятно, все это довольно просто для кого-то, кто лучше разбирается в SQL и jQuery / jqGrid, чем я, поэтому я ценю ваше терпение и помощь. Один последний комментарий, моя сетка работает, за исключением сортировки, как справиться с этим вопросом.
Спасибо.
Ответ №1:
Мое решение состояло в том, чтобы, как только у меня будут локальные данные, выполнить цикл по ним, чтобы изменить данные так, как я хочу, и динамически управлять loadonce и типом данных, чтобы обеспечить всю необходимую функциональность.