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
Форумы портала PHP.SU :: Версия для печати :: Хранимая процедура или функция
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Хранимая процедура или функция

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

1. RomAndry - 09 Мая, 2011 - 00:01:15 - перейти к сообщению
Приветствую.
Никогда не приходилось сталкиваться с процедурами и функциями в MySQL
возникла задача, возможно ли ее и как решить:
раньше была структура вида
tableA:
id
text

tableB:
id
pid <= tableA.id
text

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

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

Буду благодарен за любые советы
2. Champion - 09 Мая, 2011 - 07:20:28 - перейти к сообщению
Если таблицы связаны 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, то индексы по таблицам не будут использоваться
3. EuGen - 09 Мая, 2011 - 13:56:49 - перейти к сообщению
Champion пишет:
А можно создать вьюшку

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

 

Powered by ExBB FM 1.0 RC1