26 / 26 / 12
Регистрация: 04.02.2013
Сообщений: 250
1

Как красиво и вообще правильно организовать запросы

10.10.2014, 12:48. Показов 664. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сохраняю большое количество данных в разных связанных, зависимых и т.п. таблицах инсертами. Но выглядит это просто УЖАСНО!

Вот например один из фрагментов:

PHP
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
      $this->db->trans_start();
      
      $this->db->query($this->onDubKeyUpdate('catigory', 'name_ru', $goodsCatigory));
      
      $this->db->query("SET @catig_id = (SELECT `id` FROM catigory WHERE `name_ru` = '$goodsCatigory' LIMIT 1);");
         
      $this->db->query($this->onDubKeyUpdate('brand', 'name', $goodsBrand)); 
       
      $this->db->query("SET @brand_id = (SELECT `id` FROM brand WHERE `name` = '$goodsBrand' LIMIT 1);");
 
      $goodsVisibility = $goodsVisibility?1:0;
      $goodsDelete= $goodsDelete?1:0;
      $this->db->query("INSERT INTO product 
                         (`name`, `regNumber`, `formFactor`, 
                         `portion_count`, `weight`, `measure`, 
                         `priceRetail`, `priceGross`, `PriceBonus`, 
                      `currentDiscountRetail`, `catigoryFolder`, 
                         `fileName`, `visibility`, `delete`, 
                      `catigory_id`, `brand_id`) 
                          VALUES 
                       ('$goodsName', '$goodsRegnumber','$goodsFormfactor', 
                          $goodsPortions, $goodsWeight, '$goodsMeasureWeightVal', 
                          $goodsPriceRetail, $goodsPriceGross, $goodsPriceBonus,
                          $goodsPriceDiscount, 'test', 
                          'filename2121012', $goodsVisibility, $goodsDelete, 
                       @catig_id, @brand_id);"); 
 ...
 
     $this->db->trans_complete();
как видно в основном много место занимают строки с селектами, инсертами и т.п. не уходит постоянное чувство говнокодинга, но просто не знаю как организовать красиво такие вот запросы.
Думал положить все селекты в константы, а потом вызывать их правильный ли это подход? подскажите пожалуйста как красиво организовать такие запросы????
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.10.2014, 12:48
Ответы с готовыми решениями:

Как сделать красиво и правильно? ООП + PHP + MySQL
В одной из функций класса производится подключение к БД. Возможно ли реализовать что-то...

Как правильно организовать магазин
Как правильно организовать магазин. 1. У магазина меню многоуровневое до 5 уровней вложености 2....

Как правильно организовать обработку данных
Здравствуйте! Ситуация такая, нужно обработать ~9 000 страниц. А после чего сохранить в 24...

Как правильно организовать базу данных
Пишу сайт-портфолио. Помогите как правильно организовать базу данных. Хочу сделать примерно так:...

5
249 / 249 / 98
Регистрация: 26.07.2010
Сообщений: 1,685
10.10.2014, 13:18 2
чтобы уменьшить количество кода, можно название полей и их значение поместить в массивы, и далее сделать что-то типа
PHP
1
$this->db->query("INSERT INTO product (".implode(',',$keys).") VALUES (".implode(',',$values).")");
где $keys -названия полей, $values их значения
1
26 / 26 / 12
Регистрация: 04.02.2013
Сообщений: 250
10.10.2014, 15:30  [ТС] 3
Спасибо! Согласен такой подход получше) Никогда не работал с большим количеством таблиц, которые нужно добавлять одновременно.
0
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
10.10.2014, 23:58 4
$this->db->query("INSERT INTO product
(`name`, `regNumber`, `formFactor`,
`portion_count`, `weight`, `measure`,
`priceRetail`, `priceGross`, `PriceBonus`,
`currentDiscountRetail`, `catigoryFolder`,
`fileName`, `visibility`, `delete`,
`catigory_id`, `brand_id`)
VALUES
('$goodsName', '$goodsRegnumber','$goodsFormfactor',
$goodsPortions, $goodsWeight, '$goodsMeasureWeightVal',
$goodsPriceRetail, $goodsPriceGross, $goodsPriceBonus,
$goodsPriceDiscount, 'test',
'filename2121012', $goodsVisibility, $goodsDelete,
@catig_id, @brand_id);");
PHP
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
$data = array(
    'name' =>  $goodsRegnumber, 
    'regNumber' =>  $goodsRegnumber,
    'formFactor' => $goodsFormfactor,  
    'portion_count' => $goodsPortions,
    'weight' => $goodsWeight,
    'measure' => $goodsMeasureWeightVal, 
    'priceRetail' => $goodsPriceRetail, 
    'priceGross' => $goodsPriceGross, 
    'PriceBonus' => $goodsPriceBonus, 
    'currentDiscountRetail' => $goodsPriceDiscount,
    'catigoryFolder' => 'test',
    'fileName' => 'filename2121012',
    'visibility' => $goodsVisibility, 
    'delete' => $goodsDelete,
    'catigory_id' => '@catig_id', 
    'brand_id' => '@brand_id'
);
 
// вставка
 
$db->insert('product',$data);
 
// обновление данных
 
$db->update('product',$data, 'id ='.$id);
Естественно при наличии этих "функций" внутри интерфейса бд.
Код функций предоставить не могу так как он является частью кода класса бд который все равно вам не подойдет.

Но вот сама идея вполне.
0
26 / 26 / 12
Регистрация: 04.02.2013
Сообщений: 250
11.10.2014, 20:14  [ТС] 5
Естественно при наличии этих "функций" внутри интерфейса бд.
Думал о функциях и процедурах если я правильно Вас понял, но вот у меня от пользователя может придти массив с любым количеством и как передать такой аргумент процедуре или функции в бд не понятно.

Кстати говоря я такой массив экстактирую extract($arr), то есть наоборот перевожу в контексте на переменные. В общем думаю сделать класс который будет обрабатывать такие данные при этом сами запросы определить глобально и по необходимости заменять значения переменными.
0
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
12.10.2014, 09:59 6
у меня от пользователя может придти массив с любым количеством
в цикле не?
В общем думаю сделать класс который будет обрабатывать такие данные при этом сами запросы определить глобально и по необходимости заменять значения переменными.
вообще когда данные "предметной области" превращаются в кашу, то можно их обобщить в JSON поле котором может лежать что угодно.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2014, 09:59
Помогаю со студенческими работами здесь

Подскажите как правильно организовать цикл
Есть бд, необходимо вывести товары на вкладку Каталог. Вывожу товары в таблицу, в 1 строке должно...

Подскажите как правильно организовать базу данных
Есть таблица с информацией о работнике (id_работника и т.д.). Есть расписание, в котором я хочу...

Как правильно организовать хранение заказов в интернет-магазине
При разработке интернет-магазина пришел к такому вопросу: есть база товаров. Условно назовем их...

Как красиво организовать клиент-сервер
Здравствуйте! Пишу приложение: сервер бесконечно ждет подключения нового клиента, при подключении...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru