2015-09-27 18 views
2

很抱歉,如果該標題有點複雜......我被ORM寵壞了,我的原始SQL技能顯然很差。用他們的用戶名選擇一個用戶,然後使用他們的UID從另一個表中選擇數據

我正在寫一個鏈接到vBulletin論壇的應用程序。用戶使用其論壇用戶名進行身份驗證,並且查詢很簡單(從用戶表中通過用戶名選擇)。下半年更爲複雜。還有一個訂閱表,其中有一個時間戳,但主鍵是一個用戶標識,而不是用戶名。

這是我到目前爲止已經摸索出:

SELECT 
    forum.user.userid, 
    forum.user.usergroupid, 
    forum.user.password, 
    forum.user.salt, 
    forum.user.pmunread, 
    forum.subscriptionlog.expirydate 
FROM 
    forum.user 
    JOIN forum.subscriptionlog 
WHERE 
    forum.user.username LIKE 'SomeUSER' 

不幸的是這將返回subscriptionlog表,這是有道理的,因爲在它沒有用戶名字段的全部。是否有可能使用我從forum.user.userid獲得的用戶標識獲取訂閱日誌行,還是需要將它分解爲兩個查詢?

謝謝!

+0

課#1,除非你知道你需要它,爲什麼不使用盲'join'。這完全表達爲「交叉連接」,並且在適當的情況下_can_會有用 - 但通常不會。只需使用兩個表中的id列進行「內部連接」即可。 –

回答

2

問題是你是盲目地加入這兩張桌子。您需要指定它們與之相關的列。

我想你想要的東西,如:

SELECT * FROM user u 
    INNER JOIN subscriptionlog sl ON u.id = sl.userid 
WHERE u.username LIKE 'SomeUSER' 
1

SELECT * FROM用戶üJOIN訂閱S於u.id = s.id其中u.username = 'SomeUser的'

位粗體字是你想要添加的內容,它將2個表合併成一個返回結果的表。

+0

明白了。我不知道你可以指定這樣的變量。謝謝! –

+0

這些被稱爲別名。完整的語法將包括真實姓名和別名之間的「as」,我個人比較喜歡,但是您會看到兩種方法都在四處流動。別名很少有必要,但您可能會發現它們可以幫助您在適當的情況下輸入內容。變量是不同的,他們看起來像@ @ thisThis'。 –

+0

很高興知道。謝謝! –

1

試試這個

SELECT 
forum.user.userid, 
forum.user.usergroupid, 
forum.user.password, 
forum.user.salt, 
forum.user.pmunread, 
forum.subscriptionlog.expirydate 
FROM 
forum.user 
INNER JOIN forum.subscriptionlog 
ON forum.subscriptionlog.userid = forum.user.userid 
WHERE 
forum.user.username LIKE 'SomeUSER' 
+0

就是這樣。謝謝! –

相關問題