Проблема в Union Join For MySQL Query

0

Мне удалось выбрать из таблицы, которая сохраняет мои последние сообщения

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

вот мой код:

$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 является нулевым и пустым

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

Теги:
union

3 ответа

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

@Mac Taylor

     

Эй, конечно, ты меня понимаешь, сказал, что мне нужно еще одно условие, добавленное к этому утверждению, которое ты написал, 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
    спасибо, брат / я проверил ваш скрипт, но проблема с чтением и вообще не сработала, вы уверены, что в приведенном выше коде нет синтаксической ошибки ?!
1

Столбцы по частям союза должны иметь одно и то же имя. Попробуйте:

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
    Я не уверен, что понимаю, что вы спрашиваете
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню