2014-09-07 4 views
1

mysql 저장 프로 시저 및 변수에 대한 질문이 있습니다.MySQL 변수 설정 저장 프로 시저

테이블 이름 : es_adwords 필드 : ID # image_source # 이미지 _ # COMPUTER_ID # is_all_pC# image_state # banner_size 내가 COMPUTER_ID = {pc_number}과 image_state = 0

를 검색 할 저장 프로 시저를 만들

하지 않으면, 저장 프로 시저 ... 감사 = 1

DELIMITER $$ 
DROP PROCEDURE IF EXISTS `GetAdwordsBanner` $$ 
DELIMITER $$ 
CREATE PROCEDURE `GetAdwordsBanner`(IN compid INT) 
BEGIN 
SET @result_id := 0; 

SELECT @result_id := id FROM es_adwords WHERE image_state = 1 AND computer_id = compid ORDER BY id DESC LIMIT 0,1; 

IF (@result_id != 0) THEN 
    SELECT image_source,image_link,banner_size FROM es_adwords WHERE image_state = 1 AND computer_id = compid ORDER BY id DESC LIMIT 0,1; 
ELSE 
    SELECT image_source,image_link,banner_size FROM es_adwords WHERE image_state = 1 AND is_all_pc = 1 ORDER BY id DESC LIMIT 0,1; 
END IF; 

END $$ 
DELIMITER ; 

너의 is_all_pc 동일하게 돌려

+0

정확히 무엇이 문제입니까? 어디서 붙어 있었 니? 있다면 어떤 오류가 있습니까? – VMai

+0

내가 원하는 방식으로 작동하지 않습니다 – user2895809

+0

무엇을 기대합니까? 그리고 대신에 무엇을 얻습니까? – VMai

답변

0

논리에 문제가 있습니다. 나는 이것을 다음과 같이 고쳐 쓸 것이다 :

DELIMITER $$ 
CREATE PROCEDURE `GetAdwordsBanner`(IN compid INT) 
BEGIN 
-- use a local variable instead of a user variable 
DECLARE result_count INT; 
-- count how many rows are matching 
SELECT COUNT(*) INTO result_id FROM es_adwords WHERE image_state = 1 AND computer_id = compid; 

-- if there are matches  
IF result_count > 0 THEN 
    -- return the first matching row 
    SELECT image_source,image_link,banner_size FROM es_adwords WHERE image_state = 1 AND computer_id = compid ORDER BY id DESC LIMIT 0,1; 
ELSE 
    -- return the default one 
    SELECT image_source,image_link,banner_size FROM es_adwords WHERE image_state = 1 AND is_all_pc = 1 ORDER BY id DESC LIMIT 0,1; 
END IF; 

END $$ 
DELIMITER ; 

이것은 작동 할 것이다.

+0

정말 고마워요 :) – user2895809