2011-06-27 1 views
0

У меня есть этот код ниже. Он работает, если я использую только переменную ONE WHERE, но в тот момент, когда я добавляю другой, запрос не работает.Как у вас есть два ограничения на UNION?

Это работает, если я просто использовать это все союзы:

 where table_constant.user_id = '$uid' 

Но когда я использую этот ниже, он не работает:

 where table_constant.user_id = '$uid' and table_one.something <> '$uid' 

Код:

$sql = "select table_one.field1, table_constant.field1, 
table_one.field2, table_one.field3, table_one.field4, 
table_one.field5, table_constant.c_id 
from table_one LEFT JOIN table_constant on table_one.field1 
= table_constant.c_id 
where table_constant.user_id = '$uid' and table_one.something <> '$uid' 
UNION 
select table_two.field1, table_constant.field1, table_two.field2, 
table_two.field3, table_two.field4, table_two.field5, table_constant.c_id 
from table_two LEFT JOIN table_constant on table_two.c_id 
= table_constant.c_id 
where table_two.added_by = '$uid' and table_two.something <> '$uid' 
UNION 
select table_three.field1, table_constant.field1, table_three.field2, 
table_three.field3, table_three.field4, table_three.field5, 
table_constant.c_id 
from table_three LEFT JOIN table_constant ON table_three.c_id 
= table_constant.c_id 
where table_constant.user_id = '$uid' and table_three.something <> '$uid' 
UNION 
select table_four.field1, table_constant.field1, table_four.field2, 
table_four.field3, table_four.field4, table_four.field5, 
table_constant.c_id 
from table_four LEFT JOIN table_constant ON table_four.c_id 
= table_constant.c_id 
where table_constant.user_id = '$uid' and table_four.something <> '$uid' 
ORDER BY date DESC LIMIT $start, $limit"; 
$result = mysql_query($sql); 
+0

Что вы подразумеваете под "не работает"? Что в итоге? – Dan

+0

ничего не показывает. – KPO

+0

Тогда я думаю, вам нужно будет показать некоторые данные, которые должны дать результат, но нет. – idstam

ответ

1

С другой стороны, у меня есть достойное предположение о том, что может быть проблемой. Когда вы пишете LEFT JOIN, я предполагаю, что вы это сделаете, потому что могут быть некоторые строки, которые не соответствуют чему-либо в правой части соединения. Если вы хотите ограничить эти строки, то сделать в некотором роде, вам нужно сделать это непосредственно в JOIN. Например:

LEFT JOIN table_constant ON table_one.field1 = table_constant.c_id AND table_constant.user_id = '$uid' 

Размещая второе условие в предложении WHERE, вы, по сути превращая левый объединятся в внутреннее соединение, заставляя правую сторону, чтобы иметь значение.

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