SELECT * FROM #__a_goods WHERE goods LIKE '%".$_POST[search]."%'и
SELECT * FROM #__a_goods WHERE goods_id=$goods_id ORDER BY $field $dТ.е. два запроса обращаются к одной БД и к одной таблице, но синтаксис отличается. Во втором приведённом мной запросе после WHERE есть критерий отбора $goods_id. Я опасаюсь следующего: создам класс с синтаксисом типа
SELECT $fields FROM $table WHERE $field=$criteria ORDER BY $order $descно в случае использования первого приведённого мной запроса после WHERE $criteria, которую использую в качестве критерия отбора, будет равна null и тогда результатом запроса тоже будет null. Что скажете?
Спустя 5 минут, 43 секунды (8.02.2012 - 09:41) Игорь_Vasinsky написал(а):
ни чего сложного нет - чтобы создать го**окласс
использование html, sql запросов внутри класса - яркий пример этого.
для работы с БД есть и PDO и объектно-ориентировочный интерфейс у MySQLi
если вы считаете что вы готовы писать такими вот ->
использование html, sql запросов внутри класса - яркий пример этого.
для работы с БД есть и PDO и объектно-ориентировочный интерфейс у MySQLi
если вы считаете что вы готовы писать такими вот ->
Спустя 22 минуты, 25 секунд (8.02.2012 - 10:03) paa66 написал(а):
Цитата |
ни чего сложного нет - чтобы создать го**окласс |
Разумеется, буду писать в PHP, напрмер:
$result = "SELECT $fields FROM $table WHERE $field=$criteria ORDER BY $order $desc";Или "го**окласс", потому что обилие переменных? Я новичок, поэтому прошу объяснить.
Спустя 2 минуты, 58 секунд (8.02.2012 - 10:06) Игорь_Vasinsky написал(а):
изучите процедурный и функциональный стили программирования для начала. - совет.
Спустя 18 минут, 44 секунды (8.02.2012 - 10:25) paa66 написал(а):
Я сейчас немного прочитал про эти стили. Вот что я думаю про это. Когда мы видим, к примеру, паука, нам без разницы - относится ли он к членистоногим или насекомым, заниматься классификацией - это занятие учёных. У меня есть идея упростить код, а каким стилем у меня получится это сделать - для меня не важно. Из предыдущего высказывания я понял, что можно создать универсальный класс, выполняющий запросы к БД, но так не делают опытные программисты, они оставят как у меня сейчас. Или я неправильно понял?
Спустя 4 минуты, 51 секунда (8.02.2012 - 10:30) nugle написал(а):
вот тут есть функция работы с mysql базой, она показывает, на какой строке ошибка, останавливает код, если таковая имеется
http://irbis-team.com/15/4/4
мне лично с ней проще, называется mysqlQuery, просто замена стандартной функции mysql_query, вернее дополнение к ней
http://irbis-team.com/15/4/4
мне лично с ней проще, называется mysqlQuery, просто замена стандартной функции mysql_query, вернее дополнение к ней
Спустя 41 минута, 50 секунд (8.02.2012 - 11:12) paa66 написал(а):
nugle, код интересный, правда, не совсем то, что я хотел. Функция mysqlQuery в качестве аргумента получает переменную (или массив?) $sql в качестве готового запроса. Но я в своих запросах SELECT использую переменные в качестве критерия отбора. Будет ли тогда работать эта функция, если в переменной $sql будет находиться не только строка SELECT * FROM.. и т.д., но и другая переменная, которая является критерием отбора? И ещё, я правильно понял, что у меня не получится создать класс, содержащий в себе универсальную функцию для SELECT
function selectSQL ($fields, $table, $field, $criteria, $order, $desc){? Или, такого рода "шедевры" опытные программисты не создают?
$result = "SELECT $fields FROM $table WHERE $field=$criteria ORDER BY $order $desc";
$db = &JFactory::getDBO();
$db->setQuery($result);
$list = $db->loadAssocList();
return $list;
}
Спустя 2 часа, 8 минут, 26 секунд (8.02.2012 - 13:20) caballero написал(а):
Цитата |
изучите процедурный и функциональный стили программирования |
PHP не относится к функциональным языкам. Яваскррипт гдето ближе к этому.
Цитата |
У меня есть идея упростить код, а каким стилем у меня получится это сделать - для меня не важно |
Количество кода зависит от грамотности программиста а не от парадигмы программирования.
Спустя 2 часа, 28 минут, 30 секунд (8.02.2012 - 15:49) paa66 написал(а):
Цитата |
PHP не относится к функциональным языкам. |
Значит я неправильно понял статью про функциональный и процедурный стили программирования (в статье не говорилось, что языки могут не поддерживать функциональный стиль или, наоборот, процедурный) и придётся познакомиться с JavaScript.
Цитата |
Количество кода зависит от грамотности программиста а не от парадигмы программирования. |
Понимаете, у меня цель сделать код более кратким. После прочитанного про классы появилась мысль с помощью класса сократить код, привёл 2 кода и свой вариант сокращения. Но мой вариант к сожалению так никто и не прокомментировал. Пока ввиду отсутствия ответа прислушался к nugle и сделал код по образцу его ссылки.
Спустя 10 минут, 10 секунд (8.02.2012 - 15:59) inpost написал(а):
paa66
Более короткий - это писать так:
mysql_query("SELECT * FROM `table` WHERE `c1`= 'b2'");
Умещается в 1 строчку и зеркально очевидна работа скрипта.
Более короткий - это писать так:
mysql_query("SELECT * FROM `table` WHERE `c1`= 'b2'");
Умещается в 1 строчку и зеркально очевидна работа скрипта.
Спустя 45 секунд (8.02.2012 - 16:00) inpost написал(а):
И вообще, класс - это набор функций. Как ты можешь думать о классах, когда ещё толком не разобрался в функции?
Спустя 7 минут, 32 секунды (8.02.2012 - 16:07) sebastjan написал(а):
Ну если подумать об оптимизации кода, можно для начала создать функцию для работы с базой и вызыватьеё с различными нужными параметрами. Функции как раз и нужны для сокращения количества однотипных задач.
Спустя 14 минут, 21 секунда (8.02.2012 - 16:22) paa66 написал(а):
Цитата |
Как ты можешь думать о классах, когда ещё толком не разобрался в функции? |
Я же написал функцию в классе, проблем не обнаружил, всё работает :)
Цитата |
Ну если подумать об оптимизации кода, можно для начала создать функцию для работы с базой и вызыватьеё с различными нужными параметрами. |
Вот я и предложил свой код, повторяю его ещё раз:
function selectSQL ($fields, $table, $field, $criteria, $order, $desc){Но все молчат, видимо, так никто не делает, т.к. это по каким-то соображениям неправильно.
$result = "SELECT $fields FROM $table WHERE $field=$criteria ORDER BY $order $desc";
$db = &JFactory::getDBO();
$db->setQuery($result);
$list = $db->loadAssocList();
return $list;
}
Спустя 12 минут, 40 секунд (8.02.2012 - 16:34) inpost написал(а):
выглядит как джумла.
Ок!
Мой запрос:
Как ты его интегрируешь? :)
Ок!
Мой запрос:
$res2 = mysqlQuery("SELECT a.*,b.`photo`
FROM `" . IRB_DBPREFIX . "user` a
LEFT JOIN `" . IRB_DBPREFIX . "photo` b ON b.`id_parent` = a.`id`
WHERE (b.`id_parent` IS NULL OR b.`id_parent` IS NOT NULL)
AND a.`id` = ". $id
);
Как ты его интегрируешь? :)
Спустя 15 минут, 1 секунда (8.02.2012 - 16:49) paa66 написал(а):
Да, я для Джумлы делаю свой первый компонент
Твой запрос я не смогу интегрировать, т.к. в своём компоненте я его не использую. Я использую запрос типа того, которые я представил, они простые, без объединений Join и Union. Конечно, там есть и типа Insert, но типа Select больше. Под универсальностью я имел ввиду мои простые запросы типа Select, при этом я не претендовал на глобальную универсальность, которая подходила бы к запросу типа твоего.
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
Спустя 2 минуты, 3 секунды (8.02.2012 - 16:51) inpost написал(а):
paa66
да у тебя и WHERE a=1 AND b=2 уже не будет работать.
Передавать надо массив, его разложить foreach, склеить и сформировать.
да у тебя и WHERE a=1 AND b=2 уже не будет работать.
Передавать надо массив, его разложить foreach, склеить и сформировать.
Спустя 22 минуты, 43 секунды (8.02.2012 - 17:14) Rand написал(а):
paa66, ну если тебе уж так сильно хочется, можешь добавить метод в класс JDatabase. Что-то вроде такого (взято из modX):
:D Хотя я лично в этом большого смысла не вижу, мне наоборот удобней когда через один метод все sql запросы.
function select($fields = "*", $from = "", $where = "", $orderby = "", $limit = "") {
if (!$from)
return false;
else {
$table = $from;
$where = ($where != "") ? "WHERE $where" : "";
$orderby = ($orderby != "") ? "ORDER BY $orderby " : "";
$limit = ($limit != "") ? "LIMIT $limit" : "";
return $this->query("SELECT $fields FROM $table $where $orderby $limit");
}
}
Спустя 4 минуты, 31 секунда (8.02.2012 - 17:19) nugle написал(а):
Rand
опять же с JOIN не будет работать. Я не вижу в этом необходимости.
опять же с JOIN не будет работать. Я не вижу в этом необходимости.
Спустя 4 минуты, 21 секунда (8.02.2012 - 17:23) Rand написал(а):
Цитата (nugle @ 8.02.2012 - 20:19) |
опять же с JOIN не будет работать. Я не вижу в этом необходимости. |
Так я тоже не вижу, я же написал
![biggrin.gif](http://phpforum.ru/html/emoticons/biggrin.gif)
Спустя 15 минут, 40 секунд (8.02.2012 - 17:39) caballero написал(а):
странная попытка сократить количество кода и при этом писать стопицот запросов вместо одного
Спустя 57 минут, 9 секунд (8.02.2012 - 18:36) paa66 написал(а):
В общем, я понял, что так, как выдумал я, опытные программисты не делают. Они не делают, т.к. это нерационально, они уже наступали на эти грабли и глупо будет, если я пойду этим путём. Всё, спасибо за участие!
Спустя 58 минут, 23 секунды (8.02.2012 - 19:34) inpost написал(а):
paa66
Нет. Многие такого даже не придумывают, потому что на момент изучения классов используют сложные запросы.
Нет. Многие такого даже не придумывают, потому что на момент изучения классов используют сложные запросы.