Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Хранимая процедура или функция

 PHP.SU

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


 Страниц (1): [1]   

> Описание: Создать по алгоритму.
RomAndry Администратор
Отправлено: 09 Мая, 2011 - 00:01:15
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 913
Дата рег-ции: Янв. 2008  


Помог: 6 раз(а)




Приветствую.
Никогда не приходилось сталкиваться с процедурами и функциями в MySQL
возникла задача, возможно ли ее и как решить:
раньше была структура вида
tableA:
id
text

tableB:
id
pid <= tableA.id
text

при выполнении действия, данные из tableA копировались в tableB, что при большом количестве тупо увеличивает размер базы.
Работа ведется с tableB Только
Понятно можно переписать все используя JOIN, но вот подумал может ли справиться с этим хранимая функция MySQL

Задача такая:
все запросы к tableB
SELECT * FROM tableB вызывали бы функцию которая бы подставляла в pid и text значения из tableA

Буду благодарен за любые советы
 
My status
 Top
Champion Супермодератор
Отправлено: 09 Мая, 2011 - 07:20:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Если таблицы связаны 1-к-1, то можно просто их объединить.
Если нет, то можно JOIN, в нем ничего плохого.
А можно создать вьюшку:
CODE (SQL):
скопировать код в буфер обмена
  1. CREATE VIEW tableAB
  2. AS
  3. SELECT a.id AS a_id, a.text AS a_text, pid, b.id, b.text
  4. FROM tableB
  5. JOIN tableA ON pid = a.id
и пользоваться этим SELECT * FROM tableAB.
Это лучше, чем функции и процедуры, потому что если писать потом условия в where, то индексы по таблицам не будут использоваться
 
 Top
EuGen Администратор
Отправлено: 09 Мая, 2011 - 13:56:49
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Champion пишет:
А можно создать вьюшку

Которая по сути будет использовать JOIN.
Разумнее всего сделать так, как Вы уже сказали - объединить таблицы. Если работа всегда ведется с tableB, а логически tableB суть расширение tableA то правильнее просто взять и дополнить таблицу и использовать только ее.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB