Как два ограничения на СОЮЗ? - PullRequest
0 голосов
/ 27 июня 2011

У меня есть этот код ниже. Это работает, если я использую только одну переменную WHERE, но когда я добавляю другую, запрос не работает.

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

       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);

1 Ответ

1 голос
/ 27 июня 2011

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

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

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

...