@Bodrosh

Почуму функция не правильно возращает значение в условии WHERE?

Здравствуйте, почему функция не всегда работает так как нужно?
Данной командой
SELECT * FROM `wp_terms`
 WHERE term_id IN (272,273,160)

из базы выводится 3 записи:
$wp_terms = array(
  array('term_id' => '160','name' => '...',
  array('term_id' => '272','name' => '...',
  array('term_id' => '273','name' => '...',
);

Команда
SELECT * FROM `wp_terms`
 WHERE term_id IN (Select br_get_parent_cat(273))

Должна выводить те же 3 записи, в ней функция возвращает 3 значения (272,273,160) , но выводится только одна строка (с term_id = передаваемому в функцию значением)
Вот сама функция:
DELIMITER //  
  
CREATE FUNCTION br_get_parent_cat(var1 INT) RETURNS CHAR(100)
 
DETERMINISTIC  
SQL SECURITY DEFINER  
COMMENT 'Get parent category procedure'
BEGIN
	DECLARE parent_id INT;  
    DECLARE result, result_while, parent_id_vchar  CHAR(100);
    SET parent_id = 0;
    SET parent_id_vchar = '';
    SET result_while = '';
    SET result = var1;     
    
    SET parent_id = (SELECT `parent` FROM wp_term_taxonomy  WHERE `term_taxonomy_id` = var1);  
	SET result = concat(result, ", ", parent_id);
      
  	WHILE parent_id <> 0 DO  
       SET parent_id = ( SELECT `parent` FROM wp_term_taxonomy  WHERE `parent` <> 0 AND `term_taxonomy_id` = parent_id );      
       IF (parent_id IS NOT NULL) THEN 
        	 SET parent_id_vchar = CONVERT(parent_id, CHAR(100));   
             SET result_while = concat(result_while, ", ", parent_id_vchar);
    	END IF; 
    END WHILE;  
    
    SET result = concat(result, result_while);
    RETURN result;
    
END//  

DELIMITER ;


SELECT br_get_parent_cat(273);
Результат выполнения:
273,272,160

В чем может быть проблема? Спасибо.
  • Вопрос задан
  • 158 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
'273,272,160' ≠ 273,272,160
Ваша функция возвращает строку, а строка - это не список. Для поиска в строке используйте FIND_IN_SET(). Естественно, индекс по `term_id` в таком случае работать не будет.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы