2010-09-19 55 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"); 

這就是我現在所擁有的。我需要users_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"); 

我越來越:

所使用的SELECT語句具有不同數量的列。

回答

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

使用UNIONSELECT語句不能有不同的列數的第一個查詢。您可能想要添加一個常量字段來代替額外的列。也許是這樣的:

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