2012-06-14 4 views
0

У меня есть хранимая процедура в моей базе данных, и мне нужно искать таблицу и перекрестно ссылаться на идентификатор, а затем с помощью возвращенной строки мне нужно вставлять информацию в другую таблицу, но я не могу использовать ее информацию из поиска в вставку. Это то, что у меня есть.Использование выборок в хранимых процедурах MySQL

BEGIN 
#Routine body goes here... 
SET @UID = uid; 
SET @UIDTOFB = uid_to; 

SET @SQLTEST = CONCAT('SELECT users.user_auto_id FROM users WHERE users.user_fb_uid=  @UIDTOFB LIMIT 1'); 
PREPARE sqlcmd from @SQLTEST; 
EXECUTE sqlcmd; 

INSERT INTO challenges(challenge_from_uid, challenge_to_uid, challenge_dateadded) VALUES(@UID, @SQLTEST.users.user_auto_id, now()); 

SET @LASTID = LAST_INSERT_ID(); 
SELECT @LASTID as id; 

END 

любая помощь будет очень признательна!

ответ

1

Это не будет вставлять значение @UIDTOFB, так как вы пропустили '. Он принимает весь этот оператор как одну строку, и поэтому утверждение терпит неудачу.

SET @SQLTEST = CONCAT('SELECT users.user_auto_id FROM users WHERE users.user_fb_uid=  @UIDTOFB LIMIT 1'); 
PREPARE sqlcmd from @SQLTEST; 
EXECUTE sqlcmd; 

Во всяком случае я бы рекомендовал использовать параметры, как это:

PREPARE sqlcmd from 'SELECT users.user_auto_id FROM users WHERE users.user_fb_uid= ? LIMIT 1'; 
EXECUTE sqlcmd USING @UIDTOFB; 

Вы можете прочитать больше об этом here in the manual.

ОБНОВЛЕНИЕ: Теперь я получаю, что вы хотите сделать. Сделайте это просто так:

SELECT @anyVariable:=users.user_auto_id FROM users WHERE users.user_fb_uid= @UIDTOFB LIMIT 1; 
INSERT INTO challenges(challenge_from_uid, challenge_to_uid, challenge_dateadded) VALUES(@UID, @anyVariable, now()); 
+0

Как бы я тогда использовать users.user_auto_id, который возвращается в той же процедуре? – rorypicko

+0

@RoryPickering Обновлен мой ответ. – fancyPants

+0

Спасибо tombom! высоко оценили, спасли мне часы головных болей;) хаха – rorypicko

Смежные вопросы