2011-11-10 161 views
1

我想簡化一些mysql。我有三個選擇和三個表:結合三個mysql語句

SELECT pageid FROM thepage WHERE DATE(createdate)='2011-11-09' ORDER BY createdate DESC 

SELECT urlid FROM themix WHERE pageid=... 

SELECT link FROM theurl WHERE urlid=... 

給出一個CREATEDATE,它得到所有的pageid的,然後進入第二個表,並得到所有URLID的那些的pageid當時得到所有這些URLID的鏈接。我現在正在使用while循環,但懷疑有一種方法可以將它們合併爲一個。

任何想法?

+2

您是否嘗試過使用LEFT JOIN? – tonoslfx

+1

對,你已經說過了..你想加入表 – mishu

+0

對我來說看起來像一個簡單的SQL JOIN操作。 – GordonM

回答

5
SELECT p.pageid 
    , u.link 
FROM thepage p INNER JOIN themix m 
    ON p.pageid = m.pageid 
INNER JOIN theurl u 
    ON m.urlid = u.urlid 
WHERE DATE(p.createdate) = '2011-11-09' 
ORDER BY p.createdate DESC 

應該這樣做,我想。如果你只想要唯一的網址,使用:

SELECT u.link 
FROM thepage p 
    INNER JOIN themix m 
    ON p.pageid = m.pageid 
    INNER JOIN theurl u 
    ON m.urlid = u.urlid 
WHERE DATE(p.createdate) = '2011-11-09' 
GROUP BY m.urlid 
ORDER BY MIN(p.createdate) DESC 

圖片的標題說明

WHERE DATE(p.createdate) = '2011-11-09' 

將要掃描整個表page並呼籲每一行的DATE()功能。你有兩個選擇,使其更快:

更改createdateDATE(從DATETIMETIMESTAMP,它現在是),並使用:

WHERE p.createdate = '2011-11-09' 

或保存它,因爲它是與用途:

WHERE p.createdate >= '2011-11-09' 
    AND p.createdate < '2011-11-10' 

表和列名是沒有前綴或後綴像你這樣的the更好。這是不是更清潔,更清晰(即使沒有別名)?

SELECT url.link 
FROM page 
    INNER JOIN mix 
    ON page.pageid = mix.pageid 
    INNER JOIN url 
    ON mix.urlid = url.urlid 
WHERE DATE(page.createdate) = '2011-11-09' 
ORDER BY page.createdate DESC 
+0

似乎工作!謝謝,你有什麼特別的技巧可以用來簡化心理過程嗎?有小費嗎? – David19801

+0

不是真的,只要看看我做了什麼,並在某個時候你就明白了(這是我的經歷)。 – Manuel

+0

問題 - 它得到了一切,包括重複的urlid's ... – David19801

0

SELECT從theurl鏈路,其中(從themix選擇其中URLID(選擇從拖到繪圖頁 的pageid其中WHERE DATE(CREATEDATE)= '2011-11-09' ORDER BY CREATEDATE DESC))

OR

從theurl

SELECT鏈路如TU,themix爲Tm,拖到繪圖頁爲Tp其中 tu.id = tm.urlid和tm.pageid = tp.id和DATE(C reatedate)= '2011-11-09' ORDER BY CREATEDATE DESC

任何方式,它會給結果。

+0

他可以在哪裏使用?或者他必須使用IN? – Bytemain

+0

第一個:錯誤,子查詢返回多於一行。 – David19801

0

您可以將3個查詢嵌套到1中,並使用IN表達式來搜索多個ID。

2

您已在評論中收到您的回覆。你應該瞭解不同類型的SQL的加入

你想應該是這樣實現的:

SELECT 
    theurl.link 
FROM 
    thepage 
LEFT JOIN 
    themix 
ON 
    thepage.pageid = urlid.pageid 
LEFT JOIN 
    theurl 
ON 
    theurl.urlid = themix.urlid 
WHERE 
    DATE(thepage.createdate)='2011-11-09' 
ORDER BY 
    thepage.createdate DESC 

你應該使用的答案,你來到這裏爲起點,爲您的SQL研究