Спасибо за подсказку. Честно сказать я вообще раньше не работал с mySQL. Постараюсь разобраться в Вашем коде, но в данный момент это темный лес.)remchik писал(а): ↑21 мар 2024, 10:39 Реально прикольная задача
Код не оптимизировал
Делаете хранимку, и впередКод: Выделить всё
BEGIN DECLARE n VARCHAR(200); DECLARE v VARCHAR(200); DECLARE vv VARCHAR(200); DECLARE i INT DEFAULT 2170; DECLARE done INT DEFAULT 0; DECLARE cur1 CURSOR FOR select id as idd,`name` as namem from app_fields where `name` <>''and entities_id = 26; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; drop table if exists name_tmp; create temporary table name_tmp ( `name` VARCHAR(10), `value` VARCHAR(50) ); OPEN cur1; WHILE NOT done DO FETCH cur1 INTO n,vv; set @coll = CONCAT('Select Field_',n,' from app_entity_26 where id = ',i,' into @outvar'); set v = (Select @coll from app_entity_26 where id = i ); PREPARE stmt1 FROM @coll; EXECUTE stmt1; DEALLOCATE PREPARE stmt1; INSERT into name_tmp (`name`,`value`) VALUES (vv,@outvar); END WHILE; CLOSE cur1; Select * from name_tmp where `value` <> ''; END
v там вроде уже не нужна
Вектор я задал, можно допилить
Как получить все поля связанной сущности
- SalahievFR
- Сообщения: 282
- Зарегистрирован: 22 янв 2023, 10:14
- Имя: Фанис Салахиев
- Откуда: Россия Казань
- Контактная информация:
Re: Как получить все поля связанной сущности
Re: Как получить все поля связанной сущности
Там не очень сложно, главное знать возможности, и мое личное убеждение, что БД навмного быстрее обрабатывает такие вещи, а так можно поделить на пункты:
1. объявляем переменки
2. Читаем в выборку названия полей и их id, и что бы перебрать все выборку, объявляем курсор
2рая строка для обозначает переменку done=1 пока есть данные
3.Создаем временную таблицу
4.Работаем с курсором, и пробегаем по всей выборке
5. Ну и собственно выводим результат из временной таблицы
Вам спасибо, интересно было вспомнить, там есть еще способы разные, по сути это тоже самое что в php, Сделать запрос, пробежать по выборке, и отдельно запросами в бд выдернуть значения.
Мне чем хранимки нравятся, что их можно написать 1 раз, и использовать везде в любой точке, ну и + таскать с собой в разные проекты, думаю что и в типе поля SQL запрос - использовать удобнее, нежели php код.
1. объявляем переменки
Код: Выделить всё
DECLARE n VARCHAR(200);
DECLARE v VARCHAR(200);
DECLARE vv VARCHAR(200);
DECLARE i INT DEFAULT 2170;
DECLARE done INT DEFAULT 0;
Код: Выделить всё
DECLARE cur1 CURSOR FOR select id as idd,`name` as namem from app_fields where `name` <>''and entities_id = 26;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
3.Создаем временную таблицу
Код: Выделить всё
drop table if exists name_tmp;
create temporary table name_tmp (
`name` VARCHAR(10),
`value` VARCHAR(50)
);
Код: Выделить всё
OPEN cur1;
WHILE NOT done DO
FETCH cur1 INTO n,vv;
set @coll = CONCAT('Select Field_',n,' from app_entity_26 where id = ',i,' into @outvar');
set v = (Select @coll from app_entity_26 where id = i );
PREPARE stmt1 FROM @coll;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
INSERT into name_tmp (`name`,`value`) VALUES (vv,@outvar);
END WHILE;
CLOSE cur1;
Код: Выделить всё
Select * from name_tmp where `value` <> '';
Мне чем хранимки нравятся, что их можно написать 1 раз, и использовать везде в любой точке, ну и + таскать с собой в разные проекты, думаю что и в типе поля SQL запрос - использовать удобнее, нежели php код.
***
Тружусь как пчелка
***
SQL,BpmOnline,Creatio,BpmSoft,.NET,SAP WMS,MS SQL Server,Windows Server,IIS
Тружусь как пчелка
***
SQL,BpmOnline,Creatio,BpmSoft,.NET,SAP WMS,MS SQL Server,Windows Server,IIS
Re: Как получить все поля связанной сущности
ent - сюда ID Сущности
fie - сюда ID записи по которой поля доставать
Юзайте
fie - сюда ID записи по которой поля доставать
Юзайте
Код: Выделить всё
PROCEDURE `get_namevalue`(ent int,fie int)
BEGIN
DECLARE n VARCHAR(200);
-- DECLARE v VARCHAR(200);
DECLARE vv VARCHAR(200);
-- DECLARE i INT DEFAULT 2170;
DECLARE done INT DEFAULT 0;
DECLARE cur1 CURSOR FOR select id as idd,`name` as namem from app_fields where `name` <>''and entities_id = ent;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
drop table if exists name_tmp;
create temporary table name_tmp (
`name` VARCHAR(10),
`value` VARCHAR(50)
);
OPEN cur1;
WHILE NOT done DO
FETCH cur1 INTO n,vv;
set @coll = CONCAT('Select Field_',n,' from app_entity_26 where id = ',fie,' into @outvar');--
-- set v = (Select @coll from app_entity_26 where id = i );
PREPARE stmt1 FROM @coll;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
INSERT into name_tmp (`name`,`value`) VALUES (vv,@outvar);
END WHILE;
CLOSE cur1;
Select * from name_tmp where `value` <> '';
END
***
Тружусь как пчелка
***
SQL,BpmOnline,Creatio,BpmSoft,.NET,SAP WMS,MS SQL Server,Windows Server,IIS
Тружусь как пчелка
***
SQL,BpmOnline,Creatio,BpmSoft,.NET,SAP WMS,MS SQL Server,Windows Server,IIS
- SalahievFR
- Сообщения: 282
- Зарегистрирован: 22 янв 2023, 10:14
- Имя: Фанис Салахиев
- Откуда: Россия Казань
- Контактная информация:
Re: Как получить все поля связанной сущности
Мне удалось в php собрать значения. Но пока не удалось объединить значения в строку и перенести эту строку в поле выше (Тип: текст с редактором)remchik писал(а): ↑21 мар 2024, 17:42 Там не очень сложно, главное знать возможности, и мое личное убеждение, что БД навмного быстрее обрабатывает такие вещи, а так можно поделить на пункты:
1. объявляем переменки2. Читаем в выборку названия полей и их id, и что бы перебрать все выборку, объявляем курсорКод: Выделить всё
DECLARE n VARCHAR(200); DECLARE v VARCHAR(200); DECLARE vv VARCHAR(200); DECLARE i INT DEFAULT 2170; DECLARE done INT DEFAULT 0;
2рая строка для обозначает переменку done=1 пока есть данныеКод: Выделить всё
DECLARE cur1 CURSOR FOR select id as idd,`name` as namem from app_fields where `name` <>''and entities_id = 26; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
3.Создаем временную таблицу4.Работаем с курсором, и пробегаем по всей выборкеКод: Выделить всё
drop table if exists name_tmp; create temporary table name_tmp ( `name` VARCHAR(10), `value` VARCHAR(50) );
5. Ну и собственно выводим результат из временной таблицыКод: Выделить всё
OPEN cur1; WHILE NOT done DO FETCH cur1 INTO n,vv; set @coll = CONCAT('Select Field_',n,' from app_entity_26 where id = ',i,' into @outvar'); set v = (Select @coll from app_entity_26 where id = i ); PREPARE stmt1 FROM @coll; EXECUTE stmt1; DEALLOCATE PREPARE stmt1; INSERT into name_tmp (`name`,`value`) VALUES (vv,@outvar); END WHILE; CLOSE cur1;
Вам спасибо, интересно было вспомнить, там есть еще способы разные, по сути это тоже самое что в php, Сделать запрос, пробежать по выборке, и отдельно запросами в бд выдернуть значения.Код: Выделить всё
Select * from name_tmp where `value` <> '';
Мне чем хранимки нравятся, что их можно написать 1 раз, и использовать везде в любой точке, ну и + таскать с собой в разные проекты, думаю что и в типе поля SQL запрос - использовать удобнее, нежели php код.
Мой код сейчас такой:
Код: Выделить всё
$name_id = '';
$name = '';
$tovar_id = [348];
//Запрос заголовко и их id В форме сущности Товары, таб Атрибуты
$name_id_query = db_query('select * from app_fields where entities_id=27 and forms_tabs_id=38');
foreach ($name_id_query as $key => $values) {
$name = $values['name'];
$name_id = 'field_' . $values['id'];
$item_query = db_query('select * from app_entity_27 where id=' .$tovar_id);
foreach ($item_query as $key => $value) {
$result = $value[$name_id];
if ($result != Null) {
echo '<b style="color:red">'.$name.'</b><br>';
echo '<b style="color:black">'.$result.'</b><br>';
}
}
}
Re: Как получить все поля связанной сущности
ну в моем варианте доработать селект
на
Код: Выделить всё
Select * from name_tmp where `value` <> '';
Код: Выделить всё
Select GROUP_CONCAT(CONCAT(`name`,' - '),`value` SEPARATOR ';') from name_tmp where `value` <> '';
***
Тружусь как пчелка
***
SQL,BpmOnline,Creatio,BpmSoft,.NET,SAP WMS,MS SQL Server,Windows Server,IIS
Тружусь как пчелка
***
SQL,BpmOnline,Creatio,BpmSoft,.NET,SAP WMS,MS SQL Server,Windows Server,IIS
- SalahievFR
- Сообщения: 282
- Зарегистрирован: 22 янв 2023, 10:14
- Имя: Фанис Салахиев
- Откуда: Россия Казань
- Контактная информация:
Re: Как получить все поля связанной сущности
Добился такого результата:
Код: Выделить всё
$name_id = '';
$name = '';
$tovar_id = [348];
//Запрос заголовко и их id В форме сущности Товары, таб Атрибуты
$name_id_query = db_query('select * from app_fields where entities_id=27 and forms_tabs_id=38');
foreach ($name_id_query as $key => $values) {
$name = $values['name'];
$name_id = 'field_' . $values['id'];
$item_query = db_query('select * from app_entity_27 where id=' .$tovar_id);
foreach ($item_query as $key => $value) {
$result = $value[$name_id];
if ($result != Null) {
echo '<p style="color:black">'.$name.': '.$result.'</p>';
}
}
}
- SalahievFR
- Сообщения: 282
- Зарегистрирован: 22 янв 2023, 10:14
- Имя: Фанис Салахиев
- Откуда: Россия Казань
- Контактная информация:
Re: Как получить все поля связанной сущности
Вы меня простите за глупые вопросы) Как Ваш код использовать в поле Ajax запрос ?remchik писал(а): ↑21 мар 2024, 10:39 Реально прикольная задача
Код не оптимизировал
Делаете хранимку, и впередКод: Выделить всё
BEGIN DECLARE n VARCHAR(200); DECLARE v VARCHAR(200); DECLARE vv VARCHAR(200); DECLARE i INT DEFAULT 2170; DECLARE done INT DEFAULT 0; DECLARE cur1 CURSOR FOR select id as idd,`name` as namem from app_fields where `name` <>''and entities_id = 26; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; drop table if exists name_tmp; create temporary table name_tmp ( `name` VARCHAR(10), `value` VARCHAR(50) ); OPEN cur1; WHILE NOT done DO FETCH cur1 INTO n,vv; set @coll = CONCAT('Select Field_',n,' from app_entity_26 where id = ',i,' into @outvar'); set v = (Select @coll from app_entity_26 where id = i ); PREPARE stmt1 FROM @coll; EXECUTE stmt1; DEALLOCATE PREPARE stmt1; INSERT into name_tmp (`name`,`value`) VALUES (vv,@outvar); END WHILE; CLOSE cur1; Select * from name_tmp where `value` <> ''; END
v там вроде уже не нужна
Вектор я задал, можно допилить
Re: Как получить все поля связанной сущности
Это хранимая процедура в БД
Добавляете хранимку, и потом вместо select вызываете ее call get_namevalue (26,2170)
Добавляете хранимку, и потом вместо select вызываете ее call get_namevalue (26,2170)
***
Тружусь как пчелка
***
SQL,BpmOnline,Creatio,BpmSoft,.NET,SAP WMS,MS SQL Server,Windows Server,IIS
Тружусь как пчелка
***
SQL,BpmOnline,Creatio,BpmSoft,.NET,SAP WMS,MS SQL Server,Windows Server,IIS
- SalahievFR
- Сообщения: 282
- Зарегистрирован: 22 янв 2023, 10:14
- Имя: Фанис Салахиев
- Откуда: Россия Казань
- Контактная информация:
Re: Как получить все поля связанной сущности
никогда не поздно
***
Тружусь как пчелка
***
SQL,BpmOnline,Creatio,BpmSoft,.NET,SAP WMS,MS SQL Server,Windows Server,IIS
Тружусь как пчелка
***
SQL,BpmOnline,Creatio,BpmSoft,.NET,SAP WMS,MS SQL Server,Windows Server,IIS