2012-06-02 35 views
2

以下查詢運行良好。現在我想添加另一個表,名稱爲地址,其中包含與下面相同的submissionidzip變量。我想從地址其中zip = '$zip'中抽取所有submissionid變量,然後使用這些結果在下面的查詢中從提交表中查找對應的title行。更改查詢以從輔助表添加結果

$sqlStr = "SELECT title, points, submissionid 
      FROM submission 
      WHERE zip = '$zip' 
     ORDER BY points DESC, title ASC    
    LIMIT $offset, $rowsperpage"; 

回答

4

可以acheve此使用子查詢

$sqlStr = "SELECT title, points, submissionid 
     FROM submission 
     WHERE submissionid IN(
       SELECT submissionid 
       FROM addreses 
       WHERE zip = '$zip') 
    ORDER BY points DESC, title ASC    
LIMIT $offset, $rowsperpage"; 

參考:IN Subquery

或者與JOIN

$sqlStr = "SELECT s.title, s.points, s.submissionid 
     FROM submission s 
     INNER JOIN addresses ad 
     on ad.submissionid = s.submissionid 
     WHERE ad.zip = '$zip' 
    ORDER BY s.points DESC, s.title ASC    
LIMIT $offset, $rowsperpage"; 

參考:JOIN

而@AdrianCornish在評論中提到INNER連接速度快於子查詢。所以你最好用JOIN去做第二個選擇。

SO上的相關線程Subqueries vs joins

+3

INNER JOIN通常在使用mysql的經驗中優化得更好。例如我昨天寫了一個查詢非常相似 - WHERE/IN爲36秒,對於tmp表爲INNER JOIN爲0.06秒 –

+1

@AdrianCornish謝謝,更新回答。 –

+0

@Joy我認爲這工作,但它實際上省略**提交**的結果 – John