2010-08-08 11 views

cevap

16

Sen alt sorgu için bir kod adın olsun ve siz de her iki sorgularına koşulları uygulamak gerekir bu da seni birlik:

SELECT MAX(DateTime) 
FROM (

    SELECT DateTime 
    FROM Class_Searches 
    WHERE User_Email = '[email protected]' 
    AND DateTime > NOW() - INTERVAL 30 DAY 

    UNION ALL 

    SELECT DateTime 
    FROM Book_Searches 
    WHERE User_Email = '[email protected]' 
    AND DateTime > NOW() - INTERVAL 30 DAY 

) AS x 

veya dış sorguda koşulu uygulamak, böylece veri döndürecek:

SELECT MAX(DateTime) 
FROM (

    SELECT DateTime, User_Email 
    FROM Class_Searches 

    UNION ALL 

    SELECT DateTime, User_Email 
    FROM Book_Searches 

) AS x 
WHERE User_Email = '[email protected]' 
AND DateTime > NOW() - INTERVAL 30 DAY 
1

bir takma ad olduğu emin değilim Bir şeyi yeniden adlandırdığınızda, SELECT t.time from table t, t, bu tablonun diğer adıdır. Bu durumda, alt sorgular tarafından oluşturulan tablolar için bir takma ad vermek gerekir: Bir user_email sütunu yok çünkü hala olsa çalışmaz

SELECT MAX(ut.DateTime) 
FROM (
(
    SELECT DateTime 
    FROM Class_Searches 
) cs 
UNION ALL (
    SELECT DateTime 
    FROM Book_Searches 
) bs 
) ut 
WHERE User_Email = '[email protected]' 
AND ut.DateTime > NOW() - INTERVAL 30 DAY 

BİRLİĞİ döndü. Böylece, deneyin:

SELECT MAX(ut.DateTime) 
FROM (
(
    SELECT DateTime, User_Email 
    FROM Class_Searches 
) cs 
UNION ALL (
    SELECT DateTime, User_Email 
    FROM Book_Searches 
) bs 
) ut 
WHERE ut.User_Email = '[email protected]' 
AND ut.DateTime > NOW() - INTERVAL 30 DAY 

O hala çünkü BİRLİĞİ sözdizimi doğru çalışmaz mümkündür, ama en azından çok yakında.

+0

Ben ikinci sorgu ile bu hatayı alıyorum: # 1064 - Eğer SQL sözdizimi bir hata var; "bs ) ut WHERE ut.User_Email = '[email protected]' VE ut.DateTime> NOW() - INTER 'yakınında kullanmak için doğru sözdizimi için MySQL sunucu sürümünüze karşılık gelen kılavuzu kontrol edin – babonk

İlgili konular