2011-01-14 167 views
0
SELECT mem.name, 
      mem.regdate, 
      stat.level 
     FROM stats AS stat 
INNER JOIN members AS mem 
    WHERE stat.id = mem.id 
     AND mem.ref = {$members['id']} 

stats and members表的索引號爲id。但是當我運行查詢時,它會檢查stats表中的所有行(在members表中它只需要一個)。任何想法我做錯了什麼?謝謝。如何優化這個查詢更多?

回答

3

使用正確的ANSI-92 JOIN語法 - 加入ON子句中指定的標準:

SELECT mem.name, 
     mem.regdate, 
     stat.level 
    FROM stats AS stat 
    JOIN members AS mem ON mem.id = stat.id 
WHERE mem.ref = {$members['id']} 

沒有連接標準,MySQL會返回一個笛卡爾乘積,然後在WHERE子句應用到這些結果。幾乎任何其他數據庫都會告訴您,您提供的查詢有語法錯誤。

另外,INNER關鍵字是可選的。

+0

這就是當你不編程幾周時發生的事情......謝謝 – 2011-01-14 20:44:20

0

嘗試從主表中選擇(本例中爲members,我persume),並加入統計信息以獲取更多信息。使用ON定義統計信息如何連接到成員,並使用WHERE限制成員表的結果。

SELECT mem.name, mem.regdate, stat.level 
FROM members AS mem 
INNER JOIN stats AS stat 
    ON stat.id = mem.id 
WHERE mem.ref = {$members['id']}

因爲它是一個INNER JOIN你可以把它周圍還有(從統計數據中選擇,加入對成員),但這可能會讓給你看某個成員更有意義。