|
|
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
Господа, всем доброго дня. Вот уже который раз сталкиваюсь с проблемой, которую не могу решить. Встречался с проблемой как в MSSQL с её студией, так и в MySql (сейчас) с Mysql Workbench, PhpMyAdmin, Navicat. Раньше вздыхал, городил огород и мучился, но на этот раз решил обратиться за помощью к коллективному разуму. И так есть 2 таблички: wp_posts и wp_postmeta Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. Задача: вывести в одном гриде значения wp_posts.post_title и wp_postmeta.meta_value для последующего редактирования wp_postmeta.meta_value непосредственно в гриде . Т.е. читаем wp_postmeta.meta_value и в зависимости от него ставим в wp_postmeta.meta_value 0 или 1. Таких строчек несколько тысяч. Дополнительно отфильтровываем ненужные записи по полю wp_postmeta.meta_key . Получаем такой запрос: Код: sql 1. 2. 3. 4. Запрос возвращает правильные данные, НО, редактировать wp_postmeta.meta_value я не могу, поле не активно (если говорить о работе через Mysql Workbench) и нет привычных чекбоксов/карандашей (если говорить о работе через PhpMyAdmin). При этом PhpMyAdmin явным образом говорит: Данное выделение не содержит уникального столбца. Изменение сетки, выставление галочки, редактирование, копирование и удаление невозможно. скриншот Ну ок, добавляем столбцы с уникальными значениями в запрос: Код: sql 1. 2. 3. 4. Но, это ничего не меняет... В одном из форумов нашел совет по решению проблемы: Если при работе с базой данных через PhpMyadmin возникает ошибка "Данная таблица не содержит уникального столбца. Изменение сетки, выставление галочки, редактирование, копирование и удаление не доступно", нужно выполнить SQL запрос в базе данных ALTER TABLE tablename ADD newid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST; Только вместо tablename необходимо поставить название проблемной таблицы (без скобок и кавычек). Все бы ничего, но в каждой таблице у меня уже есть соответствующие поля. На всякий случай пытаюсь выполнить запрос, но получаю ошибку, что в общем-то логично. Что интересно, если я сделаю простейший запрос типа Код: sql 1. 2. 3. в гриде Mysql Workbench поле wp_postmeta.meta_value станет редактируемым, а в PhpMyAdmin появятся недостающие инструменты: скриншот Рискну предположить что на все опробованные мною IDE такое влияние оказывает JOIN в запросе, т.к. других принципиальных отличий в запросах я не вижу. Но, даже если так, почему это происходит? Ну и самый главный вопрос - как это победить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 14:25 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
noindexЗадача: вывести в одном гриде значения wp_posts.post_title и wp_postmeta.meta_value для последующего редактирования wp_postmeta.meta_value непосредственно в гриде . Задача в принципе нерешаема, поскольку ты не сможешь даже понять, у каких именно записей из wp_postmeta ты хочешь поменять значения. noindexПолучаем такой запрос: Код: sql 1. 2. 3. 4. Грубо говоря, это -- VIEW. Они бывают updatable и не updatable. Тут есть у тебя JOIN, что делает твой VIEW сразу неUPDATABLE. Дальше можно долго лить слёзы, но он так и останется неUPDATABLE. noindexНу ок, добавляем столбцы с уникальными значениями в запрос: Но, это ничего не меняет... Они у тебя из разных таблиц . А нужно чтобы были из одной . noindexНо, даже если так, почему это происходит? Потому что ты хочешь сделать то, что сделать невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 16:46 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
MasterZivЗадача в принципе нерешаема, поскольку ты не сможешь даже понять, у каких именно записей из wp_postmeta ты хочешь поменять значения. Почему не смогу понять? Ведь идентификаторы в гриде есть. Вот скриншот , на котором 2 записи. Если я отредактирую самую верхнюю, то IDE по идее не составит труда сгенерить запрос типа Код: sql 1. В чем сложность создания такого запроса на лету? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 18:47 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
noindexПочему не смогу понять? Ведь идентификаторы в гриде есть.Есть только имена полей результирующего набора данных. Но нет информации о том, каким полям и в каких таблицах они соответствуют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 19:21 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
miksoftЕсть только имена полей результирующего набора данных. Но нет информации о том, каким полям и в каких таблицах они соответствуют. Эммм... Это как? Названия полей ведь не с потолка берутся. Тот же скриншот . Задача проапдейтить поле meta_value. Как узнать в какой оно таблице? Из запроса как же еще?! Код: sql 1. 2. 3. 4. Таблица определена, ибо m=wp_postmeta. Как узнать как называется это поле? Из того же запроса как же еще?! Код: sql 1. 2. 3. 4. Поле определено, ибо на предыдущем шаге мы узнали что m=wp_postmeta, соответственно m.meta_value = wp_postmeta.meta_value Где сложность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 20:00 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
Пардон, вложенные теги не парсятся... и сообщения не редактируются %))) select m.meta_id, p.ID, p.post_title, m.meta_value from wp_posts as p JOIN wp_postmeta as m ON p.id=m.post_id Where m.meta_key = 'object_is_searching' Limit 0,2 и select m.meta_id, p.ID, p.post_title, m.meta_value from wp_posts as p JOIN wp_postmeta as m ON p.id=m.post_id Where m.meta_key = 'object_is_searching' Limit 0,2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 20:04 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
noindexГде сложность?Для того, чтобы все это выполнить, нужно, как минимум: - разобрать и проанализировать текст всего запроса (включая все VIEW, которые могут в нем использоваться), - вычислить всю цепочку имя_поля_в_результирующем_наборе - имя_поля - алиас_таблицы - имя_таблицы, - по каждому пункту слазить в словарь БД, чтобы убедиться, что все это можно сопоставить и сопоставить однозначно, - понять что поле, которое хочется редактировать имеет в результируещем наборе поле первичного или уникального ключа, за которое можно "зацепиться". В общем случае это довольно сложная задача. А для большинства реальных запросов она не реализуема в принципе, т.к. в них употребляются группировки, выражения, вызовы функций и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 20:11 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
miksoftДля того, чтобы все это выполнить, нужно, как минимум: - разобрать и проанализировать текст всего запроса (включая все VIEW, которые могут в нем использоваться), - вычислить всю цепочку имя_поля_в_результирующем_наборе - имя_поля - алиас_таблицы - имя_таблицы, - по каждому пункту слазить в словарь БД, чтобы убедиться, что все это можно сопоставить и сопоставить однозначно, - понять что поле, которое хочется редактировать имеет в результируещем наборе поле первичного или уникального ключа, за которое можно "зацепиться". В общем случае это довольно сложная задача. А для большинства реальных запросов она не реализуема в принципе, т.к. в них употребляются группировки, выражения, вызовы функций и т.п. Ну я не спорю что могут быть запросы из которых что-то достать сложнее чем из моего, а может и невозможно (хотя слабо себе представляю такой запрос, но я не гуру чтобы утверждать), но в моем запросе все просто как 2 байта переслать %) Я был уверен что есть какие-то доп. атрибуты / параметры запросов, которые сделают то что мне нужно. Но увы, придется написать для данной задачи свой маленький PhpMyAdmin с блек-джеком и т.д., ибо логика тут элементарная... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 20:19 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
noindexЯ был уверен что есть какие-то доп. атрибуты / параметры запросов, которые сделают то что мне нужно.Нет, в результирующем наборе записей есть только имена полей этого результирующего набора. И даже они могут быть не уникальны. noindexа может и невозможно (хотя слабо себе представляю такой запросЭлементарно: Код: sql 1. Поле ff, очевидно, редактировать невозможно, т.к. не существует соответствующего ему поля в реальной таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 20:26 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
noindexmiksoftДля того, чтобы все это выполнить, нужно, как минимум: - разобрать и проанализировать текст всего запроса (включая все VIEW, которые могут в нем использоваться), - вычислить всю цепочку имя_поля_в_результирующем_наборе - имя_поля - алиас_таблицы - имя_таблицы, - по каждому пункту слазить в словарь БД, чтобы убедиться, что все это можно сопоставить и сопоставить однозначно, - понять что поле, которое хочется редактировать имеет в результируещем наборе поле первичного или уникального ключа, за которое можно "зацепиться". В общем случае это довольно сложная задача. А для большинства реальных запросов она не реализуема в принципе, т.к. в них употребляются группировки, выражения, вызовы функций и т.п. Ну я не спорю что могут быть запросы из которых что-то достать сложнее чем из моего, а может и невозможно (хотя слабо себе представляю такой запрос, но я не гуру чтобы утверждать), но в моем запросе все просто как 2 байта переслать %) Я был уверен что есть какие-то доп. атрибуты / параметры запросов, которые сделают то что мне нужно. Но увы, придется написать для данной задачи свой маленький PhpMyAdmin с блек-джеком и т.д., ибо логика тут элементарная... просто необходимо ознакомиться с учебниками по базам, это основа и её надо знать . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 21:07 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
miksoftНет, в результирующем наборе записей есть только имена полей этого результирующего набора. И даже они могут быть не уникальны. Результирующему набору предшествует запрос, который в моём случае очень просто парсится, не особо сложнее запроса к одной таблице. miksoftnoindexа может и невозможно (хотя слабо себе представляю такой запросЭлементарно: Код: sql 1. Поле ff, очевидно, редактировать невозможно, т.к. не существует соответствующего ему поля в реальной таблице. Ну раз невозможно то не нужно, хотя в данном примере необходимость редактирования очень маловероятна. А вот возвращаясь к моему примеру - никаких преград нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 23:00 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
вадяпросто необходимо ознакомиться с учебниками по базам, это основа и её надо знать . У меня задача не знать основу, а проставить нужные значения в нужных строках, при этом хоть я и не программист, но логики и не до конца забытых знаний программирования достаточно для реализации этой задачи путем написания своей небольшой утилиты. И меня расстраивает что в навороченных средах этого не сделано по умолчанию. Как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 23:07 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
noindexИ меня расстраивает что в навороченных средах этого не сделано по умолчанию.Просто Вы в инструментах для разработчиков хотите найти функционал для пользователей. noindexпроставить нужные значения в нужных строках, при этом хоть я и не программистМожет, лучше взять Excel ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2016, 23:22 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
noindex, возьмите dbForge, он позволяет делать то что вы хотите ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 01:22 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
miksoftПросто Вы в инструментах для разработчиков хотите найти функционал для пользователей. Возможно, но тогда на лицо дискриминация. Те пользователи, кто работает с одной табличкой получается разработчики, а те, которые используют юзвери одноклеточные :) miksoftnoindexпроставить нужные значения в нужных строках, при этом хоть я и не программистМожет, лучше взять Excel ? Моих знаний Excel не достаточно даже для того что бы представить в каком направлении двигаться для решения своей задачи через него %) Alex_Ustinovnoindex, возьмите dbForge, он позволяет делать то что вы хотите Дорогой Вы мой человек, большое Вам Спасибо! От души! Работает! Как говорится "Шах и мат, атеисты" ;))) При выполнении запроса программа спршивает нужен грид только для чтения или для редактирования. Ну и при выборе редактирования, а так-же таблицы, в которую будут вноситься изменения всё работает! http://images.vfl.ru/ii/1461745268/4fdecd88/12464754.png Alex_Ustinov , еще раз спасибо!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 11:26 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
noindexРаботает!Ну что ж, dbForge подрос в моих глазах. Но, тем не менее, он остается инструментом для разработчиков, а не для пользователей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 11:31 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
miksoftНу что ж, dbForge подрос в моих глазах. Но, тем не менее, он остается инструментом для разработчиков, а не для пользователей. Самое интересное что в середине 2000-х, когда я еще более-менее занимался программированием, я использовал эту программу, отчасти потому как она была бесплатной (не было разных редакций) и выглядела полной копией Management Studio от Microsoft (с которой я в то время работал по MSSQL проектам). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 11:45 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
miksoftnoindexРаботает!Ну что ж, dbForge подрос в моих глазах. Но, тем не менее, он остается инструментом для разработчиков, а не для пользователей. ты попробуй и станешь фанатом этой проги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 11:57 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
вадяmiksoftпропущено... Ну что ж, dbForge подрос в моих глазах. Но, тем не менее, он остается инструментом для разработчиков, а не для пользователей. ты попробуй и станешь фанатом этой проги.Я пробовал, конечно. И она мне во многом нравится. Просто она мне не нужна так часто, чтобы знать конкретно о сабжевой фиче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 12:20 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
miksoft, в качестве рекламы - есть там фишка сравнения структуры и данных двух серверов, и соответственно "синхронизации" очень удобно для заливки с сервера разработки на сервер продакшен... и фишка для бэкап, удобно его делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 12:31 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
Фишек там много, но она всё-таки тормозная. Не так чтобы сильно тормозила, но всё-таки лагает на многих действиях, и это раздражает. Поэтому я для простых задач использую heidisql. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 12:40 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
tanglirФишек там много, но она всё-таки тормозная. Не так чтобы сильно тормозила, но всё-таки лагает на многих действиях, и это раздражает. Поэтому я для простых задач использую heidisql. за всё время лагов не обнаружил. на каких операциях? обращу внимание для проверки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 12:56 |
|
||
|
Редактирование ячеек в результирующем гриде
|
|||
|---|---|---|---|
|
#18+
Претензии исключительно к интерфейсу, например, на двухъядерном проце(довольно старом, но тем не менее) открытие новой вкладки(запрос, просмотр таблицы и т.п.) - от секунды до двух, мсскл манагемент студио точно так же тупит. Ничего страшного, но вот хайди там же работает моментально, в отличие от :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2016, 20:46 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39225462&tid=1831861]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
2ms |
| others: | 218ms |
| total: | 412ms |

| 0 / 0 |
