2012-03-16 124 views
-1

我正在爲拍賣網站設置一個新的數據庫方案,並試圖發送電子郵件給用戶,以便他們查找特定項目的時間已過帳。我有三個表:Complex-ish MySQL查詢

auctions 

由用戶發佈 - 每一個項目在這裏得到一個條目的標題,一個googleID,目前的出價等

alerts 

- 這些由用戶設置和它們包括哪些用戶已提醒哪些項目,使我們不警惕,他們正在尋找項目的googleID,他們的用戶ID,一個能布爾和時間戳

notifications 

-this跟蹤山姆每次運行cron.php時,用戶都會對同一個項目進行操作。包含警報ID和

所以我試圖創建一個選擇下面的查詢拍賣ID:

  • 警報在alerts表啓用
  • googleID在alerts表中auctions
  • 匹配googleID
  • 拍賣未關閉auctions
  • 提醒編號&拍賣ID在notifications表中不相同排(這是我遇到麻煩的部分。我需要確保一個拍賣ID可以有多個警報發出,但絕不會向任何用戶多次拍賣)

這是我到目前爲止的查詢,但我真的陷入了困境在最後一部分,我已經看到無處不在,我可以爲此想到。希望我已經解釋了我自己,讓我知道如果任何澄清將幫助和提前感謝!

$sql = "SELECT a.user, b.id, b.title, b.googleimg, b.authors 
     FROM alerts a, auctions b, notifications c 
     WHERE a.googleID = b.googleid AND a.enabled = 'y' AND b.closed = 0 AND ????"; 

回答

1

怎麼樣 -

SELECT 
    alerts.user, 
    auctions.id, 
    auctions.title, 
    auctions.googleimg, 
    auctions.authors 
FROM alerts 
INNER JOIN auctions 
    ON alerts.googleID = auctions.googleID 
LEFT JOIN notifications 
    ON alerts.alertID = notifications.alertID 
    AND auction.auctionID = notifications.auctionID 
WHERE alerts.enabled = 'y' 
AND auction.closed = 0 
AND notifications.alertID IS NULL 
+0

這給了我空的結果,但如果我將最後一行更改爲NOT NULL,我完全和我試圖達到的結果相反。有任何想法嗎?再次感謝 – 2012-03-17 00:28:58

+0

此外,爲了澄清,我試圖做的是類似於:http://stackoverflow.com/questions/4585225/mysql-opposite-of-inner-join 但是,我希望能夠爲每個用戶多次發送電子郵件,只要它是一個不同的拍賣ID,換句話說,每個用戶只能被標識一次每個拍賣ID – 2012-03-17 00:31:45

+0

如果你得到一個空的結果,這是因爲你有所有拍賣警報的通知條目。如果您確定不是這種情況,請發佈具體示例。 – nnichols 2012-03-17 00:49:05

0

改變了語法,現代JOIN語法

SELECT a.user, b.id, b.title, b.googleimg, b.authors 
FROM alerts a 
JOIN auctions b ON b.googleID = a.googleID 
JOIN notifications c ON C.auctionID = b.auctionID AND a.alertID<>c.alertID 
WHERE a.enabled = 'y' AND b.closed = 0 

前兩個表是一樣的,你在做什麼。第三次加入查找與此次競價相關的所有通知,其中通知中的alertID尚未在通知中。

+0

也許我很困惑,但我仍然需要能夠爲每個警報ID發送多個電子郵件,但它們不能爲同一拍賣的ID,不會這隻選擇notifcations表中沒有alertID的記錄? – 2012-03-16 22:07:13