2012-01-09 15 views
0

複数のSQL文を1つにまとめてみましたが、動作させることはできません。2つのSQL文を1つの文として結合する

私は基本的に、照会される1つのステートメントとして結合したい2つのステートメントを持っています。

$sql="SELECT DISTINCT u.".($config->realnames ? "name" : "username")." AS displayname, u.id 
FROM (#__users AS u INNER JOIN #__uddeim AS um ON u.id=um.fromid) 
WHERE um.toid=".(int)$myself." AND um.totrash=0 AND `um`.`delayed`=0".$filter. 


$sql2="SELECT DISTINCT u.".($config->realnames ? "name" : "username")." AS displayname, u.id 
FROM (#__users AS u INNER JOIN #__uddeim AS um ON u.id=um.toid) 
WHERE um.fromid=".(int)$myself." AND um.totrashoutbox=0".$filter." AND um.systemflag=0" 

そしてここでは、二つのエイリアスを使用して、「U」を、それらを組み合わせることで、私の試みであり、「O」:ここでは

は二つの文です

$filter=""; 
if ($filter_user) $filter = " AND um.fromid=".(int)$filter_user; 
if ($filter_user==-1) $filter = " AND um.fromid=0"; 
if ($filter_unread) $filter .= " AND um.toread=0"; 
if ($filter_flagged) $filter .= " AND um.flagged<>0"; 

$sql= "SELECT DISTINCT u.".($config->realnames ? "name" : "username")." AS displayname, u.id, o.".($config->realnames ? "name" : "username")." AS displayname, o.id 
FROM (#__users AS u INNER JOIN #__uddeim AS um ON u.id=um.fromid) INNER JOIN #__uddeim AS om ON o.id=om.toid 
WHERE um.toid=".(int)$myself." AND um.totrash=0 AND `um`.`delayed`=0".$filter. " AND om.fromid=".(int)$myself." AND om.totrashoutbox=0".$filter." AND om.systemflag=0"; 

しかし、これは来ています最初の2つのステートメントが個別にうまく動作するところでは結果はありません。

助けてください。

+0

何である '$ filter.'を行うことになって、クエリ1の終わりに。? – davogotland

+0

これは、フィルタが設定されている場合に一連の条件を保持する別の変数です。 –

+0

2つの結果セットをマージするために、おそらく 'UNION'を探しています。 –

答えて

1

はこれを試してみてください。

$sql=" 
SELECT 
    DISTINCT u.".($config->realnames ? "name" : "username")." AS displayname, 
    u.id 
FROM 
    (#__users AS u 
INNER JOIN 
    #__uddeim AS um 
ON 
    u.id=um.fromid) 
WHERE 
    um.toid=".(int)$myself." 
AND 
    um.totrash=0 
AND 
    `um`.`delayed`=0".$filter." 
UNION ALL 
SELECT 
    DISTINCT u.".($config->realnames ? "name" : "username")." AS displayname, 
    u.id 
FROM 
    (#__users AS u 
INNER JOIN 
    #__uddeim AS um 
ON 
    u.id=um.toid) 
WHERE 
    um.fromid=".(int)$myself." 
AND 
    um.totrashoutbox=0".$filter." 
AND um.systemflag=0" 
+0

ありがとう、それは働いた! –

+0

@muistooshort右、そのupvoteはあなたからmuだったか? – davogotland

+1

ええ、UNION ALLは良い解決策であり、あなたは奇妙にフォーマットされたSQLを悩ますことに何らかの価値があります。私はきちんとフォーマットされたコードのものも持っています。 –

関連する問題