PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (7): « 1 [2] 3 4 5 6 7 »

> Найдено сообщений: 92
shum0531 Отправлено: 27 Августа, 2015 - 12:14:00 • Тема: Используете ли вы префиксы в полях таблицы? • Форум: SQL и Архитектура БД

Ответов: 4
Просмотров: 71
Пример:
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE `news` (
  2.   `id_n` int(11) NOT NULL AUTO_INCREMENT,
  3.   `title_n` int(11) NOT NULL,
  4.   `description_n` varchar(255) NOT NULL,
  5.   PRIMARY KEY (`id_n`)
  6. );
  7.  
  8. CREATE TABLE `pages` (
  9.   `id_p` int(11) NOT NULL AUTO_INCREMENT,
  10.   `title_p` int(11) NOT NULL,
  11.   `description_p` varchar(255) NOT NULL,
  12.   PRIMARY KEY (`id_p`)
  13. );
shum0531 Отправлено: 25 Августа, 2015 - 17:11:22 • Тема: Возможно ли динамически подставить имя таблицы в FROM? • Форум: SQL и Архитектура БД

Ответов: 1
Просмотров: 29
Есть таблица:
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE `spravochnik` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `table_id` int(11) NOT NULL, -- id таблицы
  4.   `table_name` varchar(255) NOT NULL, -- имя таблицы
  5.   PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

Имеется spravochnik.id = 7.
задача вытащить данные одним запросом из таблицы (spravochnik.table_name) и id (spravochnik.table_id).
shum0531 Отправлено: 16 Марта, 2015 - 07:18:26 • Тема: COUNT(*) Возвращает строку. Это так и должно быть? • Форум: Работа с СУБД

Ответов: 3
Просмотров: 818
То есть, так и должно быть?
Я правильно понял что fetchColumn() выдает string, в соответствии конфигурации сервера.
shum0531 Отправлено: 15 Марта, 2015 - 20:58:59 • Тема: COUNT(*) Возвращает строку. Это так и должно быть? • Форум: Работа с СУБД

Ответов: 3
Просмотров: 818
PHP:
скопировать код в буфер обмена
  1. // PDO
  2. $query = "SELECT COUNT(*) FROM ... ;";
  3. var_dump($pdo->query($query)->fetchColumn());
  4.  
  5. // return string(1) "4"
shum0531 Отправлено: 31 Августа, 2014 - 20:48:03 • Тема: Можно ли написать запрос в 2 таблици • Форум: SQL и Архитектура БД

Ответов: 5
Просмотров: 56
Viper пишет:
shum0531 можно. Но производительность при этом сильно пострадает.

Я думаю это все же лучше чем второй раз базу пинать.
В какую мне сторону копать, как этот называется. Или если можно пример.
shum0531 Отправлено: 31 Августа, 2014 - 20:35:35 • Тема: Можно ли написать запрос в 2 таблици • Форум: SQL и Архитектура БД

Ответов: 5
Просмотров: 56
Можно ли написать запрос в 2 таблицы, если имя второй таблицы хранится в первой.
Например имея в таблице T1
CODE (SQL):
скопировать код в буфер обмена
  1. id      table_name      table_id
  2. 1       T2              5
  3. 2       T4              3

То есть имея имя таблицы T1 и id=1 получить содержимое T1 и T2. И имея id=2 получить T1 и T4.
Можно ли вообще такое?
shum0531 Отправлено: 30 Июня, 2014 - 11:03:31 • Тема: Каркас для разработки приложений. Ваше мнение • Форум: CMS и фреймворки

Ответов: 9
Просмотров: 1781
LIME пишет:
я что-то подобное встретил на первой работе в b[ самописной cms
и потому знаю что спросить))
что делать если нужен url не из 2ух составляющих а из 1 или 3-4-5 ? и с каждым из них должны быть гет-параметры?
а если гет-параметр нужен не в конце урл а в середине?
типа /goods/moloko/in-cart
/goods/telefon/in-cart
были такие заморочки от SEOшников
(Добавление)
выход:
типа matherialized path
храни шаблон urla в таблице
как бы тебе твое решение ни казалось красивым это не так))


Не совсем понятна цель изъятия данных из начала адресной строки или середины.
Вот генерация sql запроса, на существование и целостности url и возвращении результата
PHP:
скопировать код в буфер обмена
  1. function page_sity_sql($url_array)
  2. {
  3.         $shv_url_count = count($url_array);
  4.         $select = "SELECT l{$shv_url_count}.* FROM page_sity AS l{$shv_url_count} \r\n";
  5.         for($left_join = '', $i = 1; $i < count($url_array); $i++)
  6.         {
  7.                 $left_join = "LEFT JOIN page_sity AS l".$i." \r\n".
  8.                 "ON l".$i.".id = l".($i+1).".parent_id \r\n".
  9.                 "AND l".$i.".name_url = '".$url_array[$i-1]."' \r\n".$left_join;
  10.         }
  11.         return $select.$left_join."WHERE l".$shv_url_count.".name_url = '".$url_array[$shv_url_count-1]."' \r\n".
  12.         "AND l1.parent_id = '0';";
  13. }

Если я Вас правильно понял, нужна возможность получения всей цепочки, а не только последнего сегмента?
Тогда все просто, строку SELECT l{$shv_url_count}.* генерируем не в начале функции, а в цикле, как и выборка. Тем самым, мы получает либо все данные либо ни чего, если нарушена логика.
shum0531 Отправлено: 30 Июня, 2014 - 09:56:41 • Тема: Каркас для разработки приложений. Ваше мнение • Форум: CMS и фреймворки

Ответов: 9
Просмотров: 1781
Народ, Вы больны патернами и фреймфорками. Я не говорю что это плохо, их надо знать, но и ленится то же не стоит. Ведь php, насколько я знаю один из простейших языков программирования и фреймворки, в большинстве проектов просто, просто в них не нуждаются.
Zuldek пишет:
о вы заного открыли паттерн, уже лет 6 используемый всеми популярны

Подскажите плиз название патерна данной реализации!

И ни кого не смутило, что в данной логике все завязано на одной таблице? То бишь, говорить языком фреймворков, таблица является маршрутизатором(хранит в себе ВСЕ url адреса приложения) и контроллером.
Здесь если программисты, которые делают проекты на фреймворках, только когда это реально необходимо?
shum0531 Отправлено: 29 Июня, 2014 - 17:42:55 • Тема: Каркас для разработки приложений. Ваше мнение • Форум: CMS и фреймворки

Ответов: 9
Просмотров: 1781
Доброго времени суток! Этой темой, скорее всего опросом, я хочу узнать, сколько программистов будут солидарны с моей идеей или же нет. И по чему.

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

В итоге каркас получился менее 100 строк кода (Радость подсчитал и сам улыбнулся ) + 1 таблица как часть системы(каркаса)
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE IF NOT EXISTS `page_sity` (
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,
  3.   `name_url` varchar(255) NOT NULL,
  4.   `linck_name` varchar(255) NOT NULL,
  5.   `parent_id` int(11) NOT NULL DEFAULT '0',
  6.   `level` int(11) NOT NULL DEFAULT '1',
  7.   `sort` int(11) NOT NULL DEFAULT '0',
  8.   `id_module` varchar(255) DEFAULT NULL,
  9.   `id_table` int(11) NOT NULL,
  10.   `table_name` varchar(255) NOT NULL
  11.   PRIMARY KEY (`id`)
  12. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

Логика заключается в следующем
Берем массив из URL (Моменты касаемо безопасности это я опущу, тут они не к чему), то есть адрес /news/hlebnye-kroshki равен array ( 0 => 'news', 1 => 'hlebnye-kroshki', ), далее из массива генерируем sql запрос
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT l2.* FROM page_sity AS l2
  2. LEFT JOIN page_sity AS l1 ON l1.id = l2.parent_id AND l1.name_url = 'news'
  3. WHERE l2.name_url = 'hlebnye-kroshki' AND l1.parent_id = '0';

Для тех кто не понял: этот запрос вернет из таблицы строку где name_url = 'hlebnye-kroshki'. При этом если соблюдена иерархия news>hlebnye-kroshki
Вот и закончилась основа каркаса ))))))

Что мы получили из таблицы?
id - понятно
name_url - сегмент адресной строки относящийся к текущей странице
linck_name - название страницы или title
parent_id и level - idродительской страницы и уровень вложенности
id_module - список модулей установленных на данную страницу (верхние, нижние, основное.. меню, новости, статьи галереи, каталоги, карточки товаров.......)
id_table и table_name - id и имя таблицы где брать данные (новости, статьи галереи.......) А так же имя таблицы соответствует имени подключаемого html шаблона

примерные затраты шаред-хостера для такой системы 352.30 Кб / 0.0049 сек / 9 запросов. система отработала: 3 разных расположения меню, меню каталога товаров, 2 html блока (реклама), хлебные крошки, контент новости, комментарии к новости.

Из ООП в системе один объект синглтон для базы данных. Все остальные вспомогательные классы со статическими методами, сама система (каркас) написан в процедурном стиле.

P.S. Как то компактно получилось))). Если что то не понятно спрашиваете. И главное, Ваше мнение если поняли логику.
shum0531 Отправлено: 12 Мая, 2014 - 22:06:36 • Тема: Нюанс PDO::exec ? • Форум: Работа с СУБД

Ответов: 9
Просмотров: 2153
Спасибо всем! Увидел элементарные вещи, на которых, почему то не обращал внимание ранее )))

closed
shum0531 Отправлено: 11 Мая, 2014 - 22:47:00 • Тема: Помогите построить(оптимизировать) запрос и вывод меню • Форум: Работа с СУБД

Ответов: 6
Просмотров: 1412
KingStar пишет:
shum0531? что-то не в ту степь направили, причем здесь дерево с категориями, и

Цитата:
Получение sql запроса по url массиву

задача была трех уровненное меню. Да мой код не для этого решения, его нужно переделать. Все же дерево id + parent_id, не много вариантов выборки, мой пример даст понять принцип выборки одним запросом.
shum0531 Отправлено: 11 Мая, 2014 - 22:24:14 • Тема: Нюанс PDO::exec ? • Форум: Работа с СУБД

Ответов: 9
Просмотров: 2153
KingStar
А PDO::query обновляет данные в любом случае?
В данный скрипт поставил query и не стало ошибки
shum0531 Отправлено: 11 Мая, 2014 - 21:59:29 • Тема: Помогите построить(оптимизировать) запрос и вывод меню • Форум: Работа с СУБД

Ответов: 6
Просмотров: 1412
Наверное поздно? Но может и пригодится кому.
Код из моей системы
PHP:
скопировать код в буфер обмена
  1. /*
  2. Получение sql запроса по url массиву
  3.  
  4. $table - таблица в которую идет запрос
  5. $url_array - массив из URL. Например
  6. URL = 111/222/333/444/555
  7. $url_array = Array
  8. (
  9.     [0] => 111
  10.     [1] => 222
  11.     [2] => 333
  12.     [3] => 444
  13.     [4] => 555
  14. )
  15.  
  16. */
  17. function shv_url_sql($table, $url_array) {
  18.         global $db;
  19.        
  20.         $shv_url_count = count($url_array);
  21.         $select = "SELECT l{$shv_url_count}.* FROM {$table} AS l{$shv_url_count} \r\n";
  22.        
  23.         for($left_join = '', $i = 1; $i < count($url_array); $i++)
  24.         {
  25.                 $left_join = "LEFT JOIN {$table} AS l".$i." ON l".$i.".id = l".($i+1).".parent_id AND l".$i.".name_url = '".$url_array[$i-1]."' \r\n".$left_join;
  26.         }
  27.         return $select.$left_join."WHERE l".$shv_url_count.".name_url = '".$url_array[$shv_url_count-1]."' AND l1.parent_id = '0';";
  28. }

В результате получаем SQL запрос
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT l5.* FROM pages AS l5
  2. LEFT JOIN pages AS l4 ON l4.id = l5.parent_id AND l4.name_url = '444'
  3. LEFT JOIN pages AS l3 ON l3.id = l4.parent_id AND l3.name_url = '333'
  4. LEFT JOIN pages AS l2 ON l2.id = l3.parent_id AND l2.name_url = '222'
  5. LEFT JOIN pages AS l1 ON l1.id = l2.parent_id AND l1.name_url = '111'
  6. WHERE l5.name_url = '555' AND l1.parent_id = '0';

Запрос возвращает одну строку где name_url = '555' и вся иерархия соблюдена. name_url - поле адреса страницы.

Запрос сложный, но это лучше чем за пинывать базу Радость
shum0531 Отправлено: 11 Мая, 2014 - 21:37:38 • Тема: Нюанс PDO::exec ? • Форум: Работа с СУБД

Ответов: 9
Просмотров: 2153
Доброго времени суток! Помогите понять принцип работы PDO::exec, поиск моей проблемы не дал результатов, возможно плохо искал.
Суть:
обновляю большое количество строк в транзакции.
PHP:
скопировать код в буфер обмена
  1. $db->beginTransaction();
  2. $is_error = FALSE;
  3. // цикл ->
  4. $db->exec($sql) or $is_error  = TRUE;

Далее проверяю $is_error для того что бы откатится либо фиксировать.

В данном скрипте $is_error всегда TRUE, то есть PDO::exec где то вернула FALSE. После часа мучений пришёл к выводу, что PDO::exec возвращает FALSE если была попытка обновить строку старыми данными. Вернее данные для обновления, идентичны данным в базе и не нуждаются в их изменении (в моем случае это вполне возможно).

Так ли это?
shum0531 Отправлено: 21 Марта, 2014 - 18:50:11 • Тема: Не могу понять "and" и "&&" • Форум: Программирование на PHP

Ответов: 4
Просмотров: 313
T1grOK пишет:
Что значит ну и что? Не понял Порядок выполнения разный.
Ваш код можно представить следующим образом(скобки):
PHP:
скопировать код в буфер обмена
  1. $test1 = isset($_POST['test']) and (!empty($_POST['test']) ? $_POST['test'] : 'test');
  2. $test2 = (isset($_POST['test']) && !empty($_POST['test'])) ? $_POST['test'] : 'test';

Вот так выполняется ваш код.


Здорово closed

Страниц (7): « 1 [2] 3 4 5 6 7 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB