Почему процедура выполняется не так как аналогичный sql запрос

fonbaron

Велосипедист
Добрый день.
Возник такой вопрос - Если выполняю запрос
PHP:
SELECT *
FROM my_tree
INNER JOIN id
WHERE id.left_key >1
AND id.right_key <6
AND id.level <3
AND id.id = my_tree.iid
ORDER BY id.left_key
LIMIT 0 , 3
, то выводится 2 соответствующих строки из бд
а если выполняю процедуру
PHP:
CREATE PROCEDURE `SearchResult1`()
BEGIN 

SET @select_ := CONCAT("
SELECT *
FROM my_tree
INNER JOIN id
WHERE id.left_key > 1
AND id.right_key < 6
AND id.level < 3
AND id.id = my_tree.iid
ORDER BY id.left_key
LIMIT 0 , 3
");
PREPARE select_result FROM @select_;
EXECUTE select_result;
END
то получается 1 строка, что я не верно делаю?
 

WMix

герр M:)ller
Партнер клуба
а ты процедуру случаем не mysql_query("call SearchResult1()") вызываешь?
 

fonbaron

Велосипедист
Да а что? В чем разница?
И еще если вызвать процедуру вызвать еще раз то она не выполняется, нашел что процедура после первого раза не завершается и поэтому не получается результат, как правильно вызывать процедуру несколько раз?
 

WMix

герр M:)ller
Партнер клуба
я так не вызывал, тоесть ее нужно отработать, а после селект делать, предпологал я!
 

WMix

герр M:)ller
Партнер клуба
если уж ты так хочешь то проще view написать на мультипликацию, а selectom те одним запросом вызывать по ид... заодно увидишь что значит перемножить строки!
 

WMix

герр M:)ller
Партнер клуба
/* не тестил

PHP:
create view nested_sets as
SELECT t1.id as root, t2.*
FROM my_tree t1
INNER JOIN my_tree t2
WHERE t1.left_key < t2.left_key
AND t1.right_key > t2.right_key

PHP:
select * from nested_sets 
where root=_GET[id] 
ORDER BY left_key
*/
 

WMix

герр M:)ller
Партнер клуба
вопрос не понимаю,... процедура это нечто на мускуле, то что выполняется, и не возвращает результат, вопрос в инпут оутпут переменных, и последующего селекта...
 

WMix

герр M:)ller
Партнер клуба
да фиг знает, сколько раз вызывал, всегда выполнялось, никогда selectы не вывожу а изменяю, удаляю считаю там...
и вызов делаю кроном , те мнеб в голову не взбрело бы зафигачить селект в процедуру и колам выводить, покопайся в нете :)
 

WMix

герр M:)ller
Партнер клуба
я понимаю у богатых свои причуды, но если уже ты запихал это в процедуру, почему ты не сделал это 2мя запросами?
есть замечательная команда EXPLAIN погляди как используются индексы в твоих деревьях, при перемножении!
 

fonbaron

Велосипедист
Я ни чего не понял
получил вот это
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE id range left_key,right_key,level left_key 4 NULL 2 Using where; Using temporary; Using filesort
1 SIMPLE my_tree ALL NULL NULL NULL NULL 4 Using where; Using join buffer
зомогите с эти разобраться что это?
 

WMix

герр M:)ller
Партнер клуба
попробуй разбить запрос на 2 и посмотреть на каждый с помощью EXPLAIN далее игра найди 7 отличий и проанализируй!
 
Сверху