2010-06-03 2 views
0

мне удалось выбрать из таблицы, которая сохраняет мои последние сообщенияПроблема в союзе Регистрация Для MySQL Query

но мне нужно иметь двойное условие при выборе

вот мой код:

$sql_query = "SELECT b.*,u.username AS MY_Sender 
FROM TABLE_users u,TABLE_blogs b 
Where b.reciever = '0' AND u.user_id = b.sender 
UNION 
SELECT b.*,u.username AS MY_reciever 
FROM TABLE_users u,TABLE_blogs b 
Where b.reciever != '0' AND u.user_id = b.reciever 
ORDER BY bid DESC 
LIMIT 0,7 "; 

, но MY_reciever is Null and empty

Неужели я ошибаюсь в использовании UNION для этой необходимости?!

ответ

2
SELECT b.*,u.username AS MY_Sender, NULL AS MY_reciever 
FROM TABLE_users u,TABLE_blogs b 
Where b.reciever = '0' AND u.user_id = b.sender 
UNION 
SELECT b.*, NULL AS MY_Sender, u.username AS MY_reciever 
FROM TABLE_users u,TABLE_blogs b 
Where b.reciever != '0' AND u.user_id = b.reciever 
1

Столбцы по всем частям союза должны иметь то же имя. Try:

SELECT b.*, 
     u.username AS MY_User 
    FROM TABLE_users u, 
     TABLE_blogs b 
WHERE b.reciever = '0' 
    AND u.user_id = b.sender 
UNION 
SELECT b.*, 
     u.username AS MY_User 
    FROM TABLE_users u, 
     TABLE_blogs b 
WHERE b.reciever != '0' 
    AND u.user_id = b.reciever 
ORDER BY bid DESC 
LIMIT 0,7 

Если вам нужно определить, какая часть UNION запись была возвращена, возвращает дополнительный столбец:

SELECT b.*, 
     u.username AS MY_User. 
     'Sender' AS MyType 
    FROM TABLE_users u, 
     TABLE_blogs b 
WHERE b.reciever = '0' 
    AND u.user_id = b.sender 
UNION 
SELECT b.*, 
     u.username AS MY_User. 
     'Recipient' AS MyType 
    FROM TABLE_users u, 
     TABLE_blogs b 
WHERE b.reciever != '0' 
    AND u.user_id = b.reciever 
ORDER BY bid DESC 
LIMIT 0,7 
+0

ее не работает для нахождения реального плаката, я имею в виду именно условие: u.user_id = b.sender следует добавить к этому заявлению, как реальный плакат, как я могу присоединиться к этому условию –

+0

я не конечно, я понимаю, что вы спрашиваете –

+0

В UNION столбцы должны соответствовать *** типам данных ***, а не именам. –

1

@Mac Тейлор

эй, конечно, ты меня понимаешь, сказал, что мне нужно еще одно условие, добавленное к этому утверждению, которое ты написал, AS My_Real_Sender .., поскольку вы, возможно, знаете это заявление, которое вы написали, ине найти Reciver (my_type), а не отправитель поста

Вы имеете в виду что-то вроде этого?

SELECT b.*, 
     u.username AS MY_Sender. 
     NULL as MY_Recipient, 
     'Sender' AS MyType 
    FROM TABLE_users u, 
     TABLE_blogs b 
WHERE b.reciever = '0' 
    AND u.user_id = b.sender 
UNION 
SELECT b.*, 
     u1.username AS MY_Sender. 
     u2.username AS MY_Recipient. 
     'Recipient' AS MyType 
    FROM TABLE_users u1, 
     TABLE_users u2, 
     TABLE_blogs b 
WHERE b.reciever != '0' 
    AND u1.user_id = b.reciever 
    AND u2.user_id = b.sender 
ORDER BY bid DESC 
LIMIT 0,7 
+0

спасибо, что bro/i протестировал ваш скрипт, но проблема в чтении и вообще не работала, вы уверены, что в приведенном выше коде нет синтаксической ошибки?! –

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