powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Редактирование ячеек в результирующем гриде
23 сообщений из 23, страница 1 из 1
Редактирование ячеек в результирующем гриде
    #39224802
noindex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, всем доброго дня.

Вот уже который раз сталкиваюсь с проблемой, которую не могу решить.
Встречался с проблемой как в 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.
CREATE TABLE IF NOT EXISTS `wp_postmeta` (
  `meta_id` bigint(20) unsigned NOT NULL,
  `post_id` bigint(20) unsigned NOT NULL DEFAULT '0',
  `meta_key` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `meta_value` longtext COLLATE utf8mb4_unicode_ci
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


CREATE TABLE IF NOT EXISTS `wp_posts` (
  `ID` bigint(20) unsigned NOT NULL,
  `post_author` bigint(20) unsigned NOT NULL DEFAULT '0',
  `post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `post_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `post_content` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
  `post_title` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `post_excerpt` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `post_status` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'publish',
  `comment_status` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'open',
  `ping_status` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'open',
  `post_password` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `post_name` varchar(200) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `to_ping` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `pinged` text COLLATE utf8mb4_unicode_ci NOT NULL,
  `post_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `post_modified_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `post_content_filtered` longtext COLLATE utf8mb4_unicode_ci NOT NULL,
  `post_parent` bigint(20) unsigned NOT NULL DEFAULT '0',
  `guid` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `menu_order` int(11) NOT NULL DEFAULT '0',
  `post_type` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'post',
  `post_mime_type` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
  `comment_count` bigint(20) NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


ALTER TABLE `wp_postmeta`
  ADD PRIMARY KEY (`meta_id`),
  ADD KEY `post_id` (`post_id`),
  ADD KEY `meta_key` (`meta_key`(191));


ALTER TABLE `wp_posts`
  ADD PRIMARY KEY (`ID`),
  ADD KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`),
  ADD KEY `post_parent` (`post_parent`),
  ADD KEY `post_author` (`post_author`),
  ADD KEY `post_name` (`post_name`(191));

ALTER TABLE `wp_postmeta`
  MODIFY `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT;
ALTER TABLE `wp_posts`
  MODIFY `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT;




Задача: вывести в одном гриде значения 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.
select 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



Запрос возвращает правильные данные, НО, редактировать wp_postmeta.meta_value я не могу, поле не активно (если говорить о работе через Mysql Workbench) и нет привычных чекбоксов/карандашей (если говорить о работе через PhpMyAdmin).

При этом PhpMyAdmin явным образом говорит:
Данное выделение не содержит уникального столбца. Изменение сетки, выставление галочки, редактирование, копирование и удаление невозможно.


скриншот

Ну ок, добавляем столбцы с уникальными значениями в запрос:
Код: sql
1.
2.
3.
4.
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



Но, это ничего не меняет...
В одном из форумов нашел совет по решению проблемы:

Если при работе с базой данных через PhpMyadmin возникает ошибка "Данная таблица не содержит уникального столбца. Изменение сетки, выставление галочки, редактирование, копирование и удаление не доступно", нужно выполнить SQL запрос в базе данных

ALTER TABLE tablename ADD newid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
Только вместо tablename необходимо поставить название проблемной таблицы (без скобок и кавычек).


Все бы ничего, но в каждой таблице у меня уже есть соответствующие поля.
На всякий случай пытаюсь выполнить запрос, но получаю ошибку, что в общем-то логично.

Что интересно, если я сделаю простейший запрос типа
Код: sql
1.
2.
3.
select m.meta_id, m.meta_value  from wp_postmeta as m
Where m.meta_key = 'object_is_searching'
limit 0,2


в гриде Mysql Workbench поле wp_postmeta.meta_value станет редактируемым, а в PhpMyAdmin появятся недостающие инструменты: скриншот

Рискну предположить что на все опробованные мною IDE такое влияние оказывает JOIN в запросе, т.к. других принципиальных отличий в запросах я не вижу.
Но, даже если так, почему это происходит?

Ну и самый главный вопрос - как это победить?
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39224961
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noindexЗадача: вывести в одном гриде значения wp_posts.post_title и wp_postmeta.meta_value для последующего редактирования wp_postmeta.meta_value непосредственно в гриде .


Задача в принципе нерешаема, поскольку ты не сможешь даже понять, у каких именно записей из wp_postmeta ты хочешь поменять значения.

noindexПолучаем такой запрос:
Код: sql
1.
2.
3.
4.
select 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




Грубо говоря, это -- VIEW. Они бывают updatable и не updatable. Тут есть у тебя JOIN, что делает твой VIEW сразу неUPDATABLE.
Дальше можно долго лить слёзы, но он так и останется неUPDATABLE.


noindexНу ок, добавляем столбцы с уникальными значениями в запрос:
Но, это ничего не меняет...


Они у тебя из разных таблиц . А нужно чтобы были из одной .


noindexНо, даже если так, почему это происходит?


Потому что ты хочешь сделать то, что сделать невозможно.
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225056
noindex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivЗадача в принципе нерешаема, поскольку ты не сможешь даже понять, у каких именно записей из wp_postmeta ты хочешь поменять значения.


Почему не смогу понять?
Ведь идентификаторы в гриде есть.
Вот скриншот , на котором 2 записи.
Если я отредактирую самую верхнюю, то IDE по идее не составит труда сгенерить запрос типа
Код: sql
1.
Update wp_postmeta set meta_value = '0' where meta_id = 22736


В чем сложность создания такого запроса на лету?
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225081
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noindexПочему не смогу понять?
Ведь идентификаторы в гриде есть.Есть только имена полей результирующего набора данных.
Но нет информации о том, каким полям и в каких таблицах они соответствуют.
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225108
noindex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftЕсть только имена полей результирующего набора данных.
Но нет информации о том, каким полям и в каких таблицах они соответствуют.

Эммм...
Это как?
Названия полей ведь не с потолка берутся.
Тот же скриншот .

Задача проапдейтить поле meta_value.

Как узнать в какой оно таблице?
Из запроса как же еще?!
Код: sql
1.
2.
3.
4.
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


Таблица определена, ибо m=wp_postmeta.

Как узнать как называется это поле?
Из того же запроса как же еще?!
Код: sql
1.
2.
3.
4.
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



Поле определено, ибо на предыдущем шаге мы узнали что m=wp_postmeta, соответственно m.meta_value = wp_postmeta.meta_value

Где сложность?
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225111
noindex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пардон, вложенные теги не парсятся... и сообщения не редактируются %)))


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
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225114
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noindexГде сложность?Для того, чтобы все это выполнить, нужно, как минимум:
- разобрать и проанализировать текст всего запроса (включая все VIEW, которые могут в нем использоваться),
- вычислить всю цепочку имя_поля_в_результирующем_наборе - имя_поля - алиас_таблицы - имя_таблицы,
- по каждому пункту слазить в словарь БД, чтобы убедиться, что все это можно сопоставить и сопоставить однозначно,
- понять что поле, которое хочется редактировать имеет в результируещем наборе поле первичного или уникального ключа, за которое можно "зацепиться".
В общем случае это довольно сложная задача.
А для большинства реальных запросов она не реализуема в принципе, т.к. в них употребляются группировки, выражения, вызовы функций и т.п.
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225120
noindex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftДля того, чтобы все это выполнить, нужно, как минимум:
- разобрать и проанализировать текст всего запроса (включая все VIEW, которые могут в нем использоваться),
- вычислить всю цепочку имя_поля_в_результирующем_наборе - имя_поля - алиас_таблицы - имя_таблицы,
- по каждому пункту слазить в словарь БД, чтобы убедиться, что все это можно сопоставить и сопоставить однозначно,
- понять что поле, которое хочется редактировать имеет в результируещем наборе поле первичного или уникального ключа, за которое можно "зацепиться".
В общем случае это довольно сложная задача.
А для большинства реальных запросов она не реализуема в принципе, т.к. в них употребляются группировки, выражения, вызовы функций и т.п.

Ну я не спорю что могут быть запросы из которых что-то достать сложнее чем из моего, а может и невозможно (хотя слабо себе представляю такой запрос, но я не гуру чтобы утверждать), но в моем запросе все просто как 2 байта переслать %)

Я был уверен что есть какие-то доп. атрибуты / параметры запросов, которые сделают то что мне нужно.
Но увы, придется написать для данной задачи свой маленький PhpMyAdmin с блек-джеком и т.д., ибо логика тут элементарная...
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225133
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noindexЯ был уверен что есть какие-то доп. атрибуты / параметры запросов, которые сделают то что мне нужно.Нет, в результирующем наборе записей есть только имена полей этого результирующего набора. И даже они могут быть не уникальны.

noindexа может и невозможно (хотя слабо себе представляю такой запросЭлементарно:
Код: sql
1.
SELECT id, f1 + f2 AS ff FROM mytable

Поле ff, очевидно, редактировать невозможно, т.к. не существует соответствующего ему поля в реальной таблице.
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225155
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noindexmiksoftДля того, чтобы все это выполнить, нужно, как минимум:
- разобрать и проанализировать текст всего запроса (включая все VIEW, которые могут в нем использоваться),
- вычислить всю цепочку имя_поля_в_результирующем_наборе - имя_поля - алиас_таблицы - имя_таблицы,
- по каждому пункту слазить в словарь БД, чтобы убедиться, что все это можно сопоставить и сопоставить однозначно,
- понять что поле, которое хочется редактировать имеет в результируещем наборе поле первичного или уникального ключа, за которое можно "зацепиться".
В общем случае это довольно сложная задача.
А для большинства реальных запросов она не реализуема в принципе, т.к. в них употребляются группировки, выражения, вызовы функций и т.п.

Ну я не спорю что могут быть запросы из которых что-то достать сложнее чем из моего, а может и невозможно (хотя слабо себе представляю такой запрос, но я не гуру чтобы утверждать), но в моем запросе все просто как 2 байта переслать %)

Я был уверен что есть какие-то доп. атрибуты / параметры запросов, которые сделают то что мне нужно.
Но увы, придется написать для данной задачи свой маленький PhpMyAdmin с блек-джеком и т.д., ибо логика тут элементарная...
просто необходимо ознакомиться с учебниками по базам,
это основа и её надо знать .
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225193
noindex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftНет, в результирующем наборе записей есть только имена полей этого результирующего набора. И даже они могут быть не уникальны.


Результирующему набору предшествует запрос, который в моём случае очень просто парсится, не особо сложнее запроса к одной таблице.

miksoftnoindexа может и невозможно (хотя слабо себе представляю такой запросЭлементарно:
Код: sql
1.
SELECT id, f1 + f2 AS ff FROM mytable

Поле ff, очевидно, редактировать невозможно, т.к. не существует соответствующего ему поля в реальной таблице.
Ну раз невозможно то не нужно, хотя в данном примере необходимость редактирования очень маловероятна.
А вот возвращаясь к моему примеру - никаких преград нет.
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225196
noindex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяпросто необходимо ознакомиться с учебниками по базам,
это основа и её надо знать .
У меня задача не знать основу, а проставить нужные значения в нужных строках, при этом хоть я и не программист, но логики и не до конца забытых знаний программирования достаточно для реализации этой задачи путем написания своей небольшой утилиты.
И меня расстраивает что в навороченных средах этого не сделано по умолчанию.

Как-то так.
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225199
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noindexИ меня расстраивает что в навороченных средах этого не сделано по умолчанию.Просто Вы в инструментах для разработчиков хотите найти функционал для пользователей.
noindexпроставить нужные значения в нужных строках, при этом хоть я и не программистМожет, лучше взять Excel ?
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225210
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noindex,

возьмите dbForge, он позволяет делать то что вы хотите
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225416
noindex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftПросто Вы в инструментах для разработчиков хотите найти функционал для пользователей.

Возможно, но тогда на лицо дискриминация.
Те пользователи, кто работает с одной табличкой получается разработчики, а те, которые используют юзвери одноклеточные :)

miksoftnoindexпроставить нужные значения в нужных строках, при этом хоть я и не программистМожет, лучше взять Excel ?

Моих знаний Excel не достаточно даже для того что бы представить в каком направлении двигаться для решения своей задачи через него %)


Alex_Ustinovnoindex,
возьмите dbForge, он позволяет делать то что вы хотите

Дорогой Вы мой человек, большое Вам Спасибо!
От души!

Работает!
Как говорится "Шах и мат, атеисты" ;)))

При выполнении запроса программа спршивает нужен грид только для чтения или для редактирования.
Ну и при выборе редактирования, а так-же таблицы, в которую будут вноситься изменения всё работает!
http://images.vfl.ru/ii/1461745268/4fdecd88/12464754.png

Alex_Ustinov , еще раз спасибо!!!!
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225427
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
noindexРаботает!Ну что ж, dbForge подрос в моих глазах.
Но, тем не менее, он остается инструментом для разработчиков, а не для пользователей.
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225446
noindex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoftНу что ж, dbForge подрос в моих глазах.
Но, тем не менее, он остается инструментом для разработчиков, а не для пользователей.

Самое интересное что в середине 2000-х, когда я еще более-менее занимался программированием, я использовал эту программу, отчасти потому как она была бесплатной (не было разных редакций) и выглядела полной копией Management Studio от Microsoft (с которой я в то время работал по MSSQL проектам).
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225462
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftnoindexРаботает!Ну что ж, dbForge подрос в моих глазах.
Но, тем не менее, он остается инструментом для разработчиков, а не для пользователей.
ты попробуй и станешь фанатом этой проги.
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225481
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmiksoftпропущено...
Ну что ж, dbForge подрос в моих глазах.
Но, тем не менее, он остается инструментом для разработчиков, а не для пользователей.
ты попробуй и станешь фанатом этой проги.Я пробовал, конечно. И она мне во многом нравится.
Просто она мне не нужна так часто, чтобы знать конкретно о сабжевой фиче.
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225492
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft,
в качестве рекламы - есть там фишка сравнения структуры и данных двух серверов, и соответственно "синхронизации"
очень удобно для заливки с сервера разработки на сервер продакшен...
и фишка для бэкап, удобно его делать.
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225502
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фишек там много, но она всё-таки тормозная. Не так чтобы сильно тормозила, но всё-таки лагает на многих действиях, и это раздражает. Поэтому я для простых задач использую heidisql.
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39225517
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirФишек там много, но она всё-таки тормозная. Не так чтобы сильно тормозила, но всё-таки лагает на многих действиях, и это раздражает. Поэтому я для простых задач использую heidisql.
за всё время лагов не обнаружил.
на каких операциях? обращу внимание для проверки.
...
Рейтинг: 0 / 0
Редактирование ячеек в результирующем гриде
    #39226139
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Претензии исключительно к интерфейсу, например, на двухъядерном проце(довольно старом, но тем не менее) открытие новой вкладки(запрос, просмотр таблицы и т.п.) - от секунды до двух, мсскл манагемент студио точно так же тупит. Ничего страшного, но вот хайди там же работает моментально, в отличие от :)
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Редактирование ячеек в результирующем гриде
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]