programing

절차에 대한 각 대안에 대한 MySQL

topblog 2023. 10. 10. 20:03
반응형

절차에 대한 각 대안에 대한 MySQL

제 문제는 꽤 간단합니다.자리가 있습니다.sets제품 세트(예를 들어 컴퓨터, 마우스, 키보드 등 겉으로 보기에 더 많은 제품)를 저장합니다. M:N을 사용하여 연결됩니다.sets_products의 테이블.productstable. 제품마다 파라미터가 있을 수 있습니다(다시 연결 M:N).

모든 파라미터를 문자열로 생성하는 프로시저가 있습니다(검색 캐시의 경우 'hdd:120GB, LCD:1440:900, ...' 등). 하지만 이제는 해당 세트의 제품들을 순환시켜 각각의 프로시저를 호출해야 합니다.PHP로 할 수 없습니다. 트리거에 사용되기 때문입니다.

이와 같은 것을 사용하고 싶습니다(pseudo SQL)

FOREACH(SELECT products_id FROM sets_products WHERE set_id = 1)
    generate_parameter_list(product_id,@result)
    @param = CONCAT(@param,",",@result);
END FOREACH;

MySQL에서 이 작업을 수행할 수 있습니까?

커서에 대한 mysql 참조입니다.그래서 아마 이런 일이 아닐까 생각합니다.

  DECLARE done INT DEFAULT 0;
  DECLARE products_id INT;
  DECLARE result varchar(4000);
  DECLARE cur1 CURSOR FOR SELECT products_id FROM sets_products WHERE set_id = 1;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

  OPEN cur1;

  REPEAT
    FETCH cur1 INTO products_id;
    IF NOT done THEN
      CALL generate_parameter_list(@product_id, @result);
      SET param = param + "," + result; -- not sure on this syntax
    END IF;
  UNTIL done END REPEAT;

  CLOSE cur1;

  -- now trim off the trailing , if desired

이는 MySQL로 수행할 수 있지만 매우 직관적이지 않습니다.

CREATE PROCEDURE p25 (OUT return_val INT)
BEGIN
  DECLARE a,b INT;
  DECLARE cur_1 CURSOR FOR SELECT s1 FROM t;
  DECLARE CONTINUE HANDLER FOR NOT FOUND
  SET b = 1;
  OPEN cur_1;
  REPEAT
    FETCH cur_1 INTO a;
    UNTIL b = 1
  END REPEAT;
  CLOSE cur_1;
  SET return_val = a;
END;//

이 가이드를 확인하십시오: mysql-store procedures.pdf

언급URL : https://stackoverflow.com/questions/1775521/mysql-foreach-alternative-for-procedure

반응형