2012-01-09 4 views
0

Я рассмотрел объединение нескольких операторов sql как одно, но не могу заставить его работать.Объедините два оператора SQL как один оператор

У меня в основном есть два утверждения, которые я хотел бы объединить как одно утверждение, которое будет запрошено.

Вот два заявления:

$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» и «о»:

$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"; 

Но это идет вверх без каких-либо результатов, когда первые два заявления, индивидуально работают нормально.

Любая помощь приветствуется.

+0

что '$ filter.' в конце запроса одного предполагается сделать.? – davogotland

+0

это еще одна переменная, которая просто переносит набор условий, если фильтр установлен. –

+0

Вы, вероятно, ищете '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 был от вас, му, не так ли? – davogotland

+1

Да, UNION ALL - это хорошее решение, и вы заслуживаете того, чтобы дразнить этот странный формат SQL. У меня есть вещь для аккуратно отформатированного кода. –

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