2011-06-01 168 views
0

我有usersusers和另一個表premium_users其中我持有用戶名和他購買高級會員資格的日期。Mysql加入查詢

如何使用mysql連接,以便在單個查詢中,我可以從表users中選擇所有列,並且還可以爲每個高級用戶知道他加入的日期。

USERS:

ID USERNAME 
1 JOHN 
2 BILL 
3 JOE 
4 KENNY 

高級用戶:

ID USERID DATE 
1 2  20/05/2010 
2 4  21/06/2011 

決賽桌(將返回我的查詢中的一個)應該是這樣的:

ID USERNAME DATE 
1 JOHN 
2 BILL  20/05/2010 
3 JOE 
4 KENNY 21/06/2011 

某些行的DATE值爲空可以嗎? 如何檢查該值是否爲空? $row['date']==''

編輯: 這只是一個例子,但用戶表有更多的專欄中,我如何從用戶和premium_users只有日期選擇無需編寫所有列?

回答

1
select u.*, pu.DATE 
from USERS u LEFT OUTER JOIN PREMIUM_USERS pu on 
    u.ID = pu.USERID 

您可以檢查是否一行是空的,:

if (!$row['DATE']) 
{ 
    ... 
} 
+0

謝謝。看到我的編輯。 – Cristy 2011-06-01 15:03:40

+0

更改了我的答案 – 2011-06-01 15:05:19

0
SELECT A.*, B.DATE 
FROM USERS A 
LEFT JOIN PREMIUIM_USERS B on A.ID=B.USERID 

EDITED

0
select USERS.ID, USERS.USERNAME, PREMIUM_USERS.DATE 
from USERS 
join PREMIUM_USERS on USERS.ID = PREMIUM_USERS.ID 
order by USERS.ID 
0

這是MSSQL語法,但它應該是相當類似的.. 。

select * 
from users u 
left join premiumUsers p 
on u.id = p.id 
order by u.id asc 
+0

這與MySQL中的語法相同。 – Johan 2011-06-01 15:11:16

+0

@Johan - 感謝您的澄清,我想如果它不完全一樣,那就非常接近了 – Brett 2011-06-01 15:13:02

0

將它放在一張表中可能會更容易。您可以爲isPremium(t/f)和premiumDate設置空值字段。你實際上甚至不需要isPremium字段。只是premiumDate,如果它爲空,它們不是溢價,如果它有價值,它們是高級用戶,並且你有他們加入的日期。

+0

我實際上沒有「isPremium」專欄。我這樣做是因爲在某些查詢中我只需要選擇高級用戶,所以最好只對40-50個用戶進行查詢,而不是10.000 – Cristy 2011-06-01 15:10:24

+0

以及您始終可以爲高級用戶創建一個視圖。基本上從日期不爲空的用戶中選擇*。 – Bojan 2011-06-01 15:13:53

+0

是的,但是如果我有1.000.000個用戶,那麼選擇它會很慢。如果我有一個單獨的獎勵表,當我想要看到高級用戶時,我只會選擇那些高級用戶(少於用戶表的10%) – Cristy 2011-06-01 15:15:51