2011-05-23 110 views
0

這裏有兩種說法我想在一個有兩個選擇語句幫助:我需要使用連接

SELECT pictures.picture, users.fname, users.lname, users.email, users.phone 
FROM users, pictures 
WHERE users.userid = 1 
AND pictures.userid = users.userid; 

SELECT pictures.picture, users.fname, users.lname, posts.post, 'post' AS 
type 
FROM users, posts, pictures 
WHERE users.userid = posts.userid 
AND posts.postid > 0 
AND users.userid =1 
AND pictures.userid = users.userid 
GROUP BY time 

以前我一直在使用UNION語句,但我可以」在這種情況下,由於兩個語句中的列數不匹配,所以不要這樣做。

在此先感謝。

+0

使用隱式連接是一個極其糟糕的做法。 PLease學習如何編寫顯式連接。 – HLGEM 2011-05-23 16:41:01

回答

1
SELECT p.picture, u.fname, u.lname, u.email, u.phone, p.post, 'post' AS type 
FROM users u 
LEFT JOIN posts p ON u.userid = p.userid 
LEFT JOIN pictures pic ON pic.user_id = u.userid 
WHERE u.userid = 1 
GROUP BY time 

如果您需要在結果集中的帖子或圖片您可以更改LEFT JOININNER JOIN

+0

如果我想讓電子郵件,電話號碼,名字,第二個名字和圖片出現在頂部,然後是底部的帖子,我該怎麼辦?這些帖子可能還包括名字和圖片。 – user766346 2011-05-23 17:12:58

+0

你不會直接從RDBMS獲得那種迴應。您可以使用ORM來獲得這種分組(父/子)或手動執行。爲此,請按用戶排序結果,然後僅在第一次看到該用戶時才顯示用戶詳細信息。 – Brad 2011-05-23 17:19:55

+0

非常感謝您的幫助,先生! – user766346 2011-05-23 17:45:53

1

如果您使列名稱匹配,則可以使用UNION。例如:

SELECT pictures.picture, users.fname, users.lname, users.email, users.phone, NULL, NULL 
FROM users, pictures 
WHERE users.userid = 1 
AND pictures.userid = users.userid 
UNION ALL 
SELECT pictures.picture, users.fname, users.lname, NULL, NULL, posts.post, 'post' AS 
type 
FROM users, posts, pictures 
WHERE users.userid = posts.userid 
AND posts.postid > 0 
AND users.userid =1 
AND pictures.userid = users.userid 
GROUP BY time 
+0

嘗試此操作時出現錯誤:#1064 - 您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,在'UNION ALL SELECT pictures.picture,users.fname,users.lname,NULL,NULL,posts'附近使用正確的語法。在第1行 – user766346 2011-05-23 16:39:49

+0

我在'UNION'之前有一個流浪分號......糾正。 – dmc 2011-05-23 17:48:46

1
SELECT pictures.picture, users.fname, users.lname, posts.post, 
     'post' AS type, users.email, users.phone 
FROM users 
INNER JOIN pictures ON users.userid = pictures.userid 
INNER JOIN posts on users.userid = posts.userid 
WHERE users.userid = 1 
AND posts.postid > 0 
GROUP BY time; 
0

這可能是一個愚蠢的問題,我可能不是理解的東西,但爲什麼你需要兩個陳述?

SELECT pictures.picture, users.fname, users.lname, 
FROM users, pictures 
WHERE users.userid = 1 
AND pictures.userid = users.userid; 

SELECT pictures.picture, users.fname, users.lname, posts.post, 
    'post' AS type, users.email, users.phone 
FROM users 
LEFT JOIN posts ON (posts.userid = users.userid AND posts.postid > 0) 
LEFT JOIN pictures (pictures.userid = users.userid) 
WHERE users.userid =1 
GROUP BY time 

希望有幫助。