2012-10-30 15 views
5

Chciałbym zapisać wynik z SELECT na wiele zmiennych.SELECT INTO @ Zmienne MySQL

Wiem, że wynik tego zapytania zawsze zwróci 6 ints z 6 różnych wierszy.

Próbowałem za pomocą następującego kodu:

SELECT id INTO @photo1, @photo2, @photo3, @photo4, @photo5, @photo6 
FROM album WHERE uploaded = @time AND scene_id = NEW.id; 

album jest stół. uploaded to pole oznaczone album. scene_id to pole w album. id to PRIMARY_KEY z album.

Przeczytałem, że liczba zmiennych musi być równa liczbie pól. Co oczywiście nie ma miejsca w powyższym stwierdzeniu.

Mając to na uwadze, w jaki sposób mogę przezwyciężyć ten problem?

Ten kod jest używany w wyzwalaczu MySQL.

EDIT: Odpowiedni schemat tabeli jak na życzenie:

person -- name of table 
id | approved -- id is PK 

album -- name of table 
id | uploaded | scene_id -- id is PK 

wyzwalania jest zwolniony na zmianę approved od 0 do 1

+0

Będziesz musiał opublikować język, którego używasz do kierowania tą bazą danych. Jeśli nie wiem, czego chcesz, nie możesz tego zrobić w jednym wyborze. – climbage

+0

Buduję to w wyzwalaczu MySQL. Dzięki –

+0

Czy mogę zapytać, dlaczego chcesz dane w zmiennych? Jeśli chcesz zrobić cokolwiek z danymi, które zostały później wstawione/usunięte, dlaczego nie wybrać bezpośrednio z tabel "OLD"/"NEW"? – Bridge

Odpowiedz

8

Można przyłączyć się do tej samej tabeli i zapewnić, że każdy przyłączyć zapewni nowy identyfikator, coś (na przykład dla dwóch identyfikatorów, ale dostaniesz punkt.):

SELECT a1.id, a2.id INTO @photo1, @photo2 
FROM album a1 
inner join album a2 on a2.scene=a1.scene and a2.upload=a1.upload and a2.id>a1.id 
WHERE a1.uploaded = @time AND a1.scene_id = NEW.id; 

Zobacz SqlFiddle do pełnego SQL i testu.

+0

Dziękuję. Ale mam błąd # 1415 - Nie można zwrócić zestawu wyników z wyzwalacza. 'select @ photo1, @ photo2, @ photo3, @ photo4, @ photo5, @ photo6;' powoduje błąd. Jakieś pomysły? –

+0

@ Ríomhaire to coś innego, musisz podać swój kod aktywacyjny. – dan

+0

Otrzymuję również ten błąd; # 1235 - Ta wersja MySQL nie obsługuje jeszcze "wielu wyzwalaczy z tym samym czasem działania i zdarzeniem dla jednej tabeli". –