2011-02-04 16 views
5

İki MySQL tablom var. Bir oylama tablosu (id, userId, postId, voteTypeId) ve bir gönderi tablosu (id, postTypeId, userId, parentId) tablosu. Oylara ekledikten sonra ateşleyen bir tetikleyici yazıyorum.MySQL'de farklı bir tabloyu güncellemek için nasıl bir tetikleyici kullanabilirim?

Tetikleyicinin, gönderi tablosundaki bir gönderiyi güncellemesini istiyorum. Ancak bu gönderi benim oy tablosunda postId; Bu gönderinin ebeveyni.

BEGIN 
CASE NEW.voteTypeId 
    WHEN 2 THEN UPDATE posts SET posts.acceptedAnswerId = NEW.postId WHERE posts.id = @the parent postId of NEW.postId 
    ELSE 
     BEGIN 
     END; 
    END CASE; 
END 

ben yerine @the ebeveynin bu kullanarak denedim ...:

(SELECT posts.parentId FROM posts WHERE posts.id = NEW.postId) 

Ama sözdizimi INTO SELECT'te çeşit kullanmak sürece seni tetikleyiciler de seçer yapabilirsiniz sanmıyorum . Güncellemek istediğim ana gönderiye ilişkin tek referansım, oy kullanmasında alt öğesi olan çocuğunun yayınlanmasıdır. Bu yüzden, bir seçimle doğru kimliği yakalamadan güncellemeyi nasıl yapacağımı bilmiyorum.

Bu mümkün mü?

+0

Sen aslında içinde bir tetikleyici bir SEÇ yapabilirsiniz. Diğer sözdiziminiz biraz kapalı görünüyor. – Mchl

+0

@Mchl, Birkaç kombinasyon denedim, ama işe yaramadı. Beni yanlış yaptığım şeye işaret edebilir misin? – Mohamad

cevap

2

Ben böyle yapardım:

BEGIN 
    IF (NEW.voteTypeId = 2) THEN 
    UPDATE 
     posts AS p 
    CROSS JOIN 
     posts AS p2 
    ON 
     p.id = p2.parentId 
    SET 
    p.acceptedAnswerId = NEW.postId 
    WHERE 
    p2.id = NEW.postId; 
    END IF; 
END 
+0

bunun için teşekkürler. Sadece neden bir çapraz katılımı kullandığını sorabilir miyim? Neden bir takma adla normal bir katılım değil? – Mohamad

+1

MySQL 'INNER JOIN' ve' CROSS JOIN' ve 'JOIN' içinde eşdeğerdir. Aslında, ANSI SQL belirtimine göre, burada 'INNER JOIN' kullanmalıydım (çünkü "ON" yerine "USING()' yerine "koşulu kullanmıştım). İşlevsel olarak hiçbir fark yaratmaz, ancak taşınabilirliği potansiyel olarak zorlar. – Mchl

İlgili konular