2010-09-19 3 views
1
$queryActivities = mysql_query(" 
SELECT ua.status, ua.date, 'status' AS is_table FROM users_statuslog ua 
    WHERE ua.uid = '{$showU[id]}' 
UNION ALL 
SELECT us.message, us.date 'wall' FROM users_wall us 
    WHERE us.uid = '{$showU[id]}' 
ORDER BY `date` DESC"); 

Это то, что я имею прямо сейчас. И мне нужно больше столбцов от user_wall, больше, чем мне нужно в users_statuslog. Как я могу их выбрать? Потому что я не могу сделать так:Выбор колонн в UNION

(Допустим, я хочу isReplyFrom и смотреть с users_wall)

$queryActivities = mysql_query(" 
SELECT ua.status, ua.date, 'status' AS is_table FROM users_statuslog ua 
    WHERE ua.uid = '{$showU[id]}' 
UNION ALL 
SELECT us.message, us.date, us.isReplyFrom, us.viewed 'wall' FROM users_wall us 
    WHERE us.uid = '{$showU[id]}' 
ORDER BY `date` DESC"); 

Я получаю:

Использованный ЗЕЬЕСТ имеют разное количество колонны.

ответ

2

Как говорится в сообщении, у вас есть два варианта с различным количеством столбцов.
Объединение будет «конкатенировать» результат вашего первого выбора на ваш второй выбор, но если количество столбцов не одинаково, оно не может работать.

Либо найти способ, чтобы иметь одинаковое количество столбцов или добавить фиктивные столбцы в запросе:

SELECT ua.status, ua.date, 'dummy' AS replyFrom, 'dummy' AS viewed, 'status' AS is_table FROM users_statuslog ua 
    WHERE ua.uid = '{$showU[id]}' 
UNION ALL 
SELECT us.message, us.date, us.isReplyFrom, us.viewed, 'wall' FROM users_wall us 
    WHERE us.uid = '{$showU[id]}' 
ORDER BY `date` DESC 

Ресурсы:

1

Вы должны добавить некоторые поддельные столбцы первого запрос

$queryActivities = mysql_query(" 
SELECT ua.status, ua.date, null AS isReplyFrom, null AS viewed, 'status' AS is_table FROM users_statuslog ua 
    WHERE ua.uid = '{$showU[id]}' 
UNION ALL 
SELECT us.message, us.date, us.isReplyFrom, us.viewed, 'wall' FROM users_wall us 
    WHERE us.uid = '{$showU[id]}' 
ORDER BY `date` DESC"); 
1

В SELECT заявлениях не может иметь различное число столбцов при использовании UNION. Вы можете добавить постоянное поле вместо дополнительного столбца. Возможно, что-то вроде этого:

SELECT ua.status, ua.date, 0 AS isReplyFrom, 'status' AS is_table 
FROM users_statuslog ua 
WHERE ua.uid = '{$showU[id]}' 
UNION ALL 
SELECT us.message, us.date, us.isReplyFrom, us.viewed 'wall' 
FROM users_wall us 
WHERE us.uid = '{$showU[id]}' 
ORDER BY `date` DESC 
Смежные вопросы