2012-03-19 81 views
-1

我有2個表,每個表中的唯一標識在兩個表中都是相同的。 如何在PHP中將兩個表中的數據連接起來?MySQL在PHP中使用內連接

當我常拉的數據我不喜歡這樣寫道:

$get_board_array = mysql_query("SELECT * FROM posts WHERE user_id_to = '$id' "); 
     while($posts = mysql_fetch_array($get_board_array)) 
     { 
      $post_id = $get_post['post_id']; 
      $html_output .= "<p>".$post_id."</p>"; 
     } 

至於來自不同表拉低數據並沒有得到這一切混合起來,想到做這樣的:

$get_arrayA = mysql_query("SELECT * FROM tableA WHERE age = '36' "); 
    while($dataA = mysql_fetch_array($get_arrayA)) 
    { 

     $dataA_id = $dataA['id']; 
     $dataA_firstName = $dataA['FirstName']; 

    foreach($dataA_id) 
    { 
     $get_arrayB = mysql_query("SELECT * FROM tableB where id='".$dataA_id."'"); 
     while($dataB = mysql_fetch_array($get_arrayB)) 
     { 

     $dataB_lastName = $dataB['LastName']; 

     $html_output .= "<p>".$dataA_firstName.$dataB_lastName"</p>"; 

     echo $html_output; 
     } 
    } 
} 

或者這是否太奇怪了?

我知道如何在SQL內部使用內部連接來完成它,但我該如何在PHP中執行類似的操作並輸出html?

+4

嵌套查詢不好!改爲查看[MySQL JOINs](http://mysqljoin.com/)。想一想 - 你將爲外部查詢返回的每一行運行查詢。這是非常慢的,而'JOIN'只有一個查詢。 – Bojangles 2012-03-19 19:55:35

+1

您的聲明:'$ dataA_id = $ dataA ['id'];'只是更新變量的值,而不是創建數組 – hjpotter92 2012-03-19 19:56:39

+2

如果您知道如何在SQL中執行此操作,那麼您知道如何在「PHP 」。你不應該選擇'*',你不應該在循環中嵌套查詢。儘可能多地提取數據。 – MetalFrog 2012-03-19 19:57:50

回答

1

這是因爲你誤導使用通配符(*)的字符。 停下來!當傲慢的php開發人員認爲他們不需要學習SQL時,會發生這種情況。如果你需要什麼,然後選擇它。

SELECT 
    foo.foo_id, 
    foo.data as paramX , 
    bar.type, 
    bar.something_else 
FROM foo 
    INNER JOIN bar USING (foo_id) 
WHERE 
    foo.state = 'open' 
AND bar.type = 3 
+0

'USING(foo_id)'是'ON foo.foo_id = bar.foo_id'的簡寫。 – 2012-03-19 20:12:22

+0

我不知道你只能選擇1列。我在1月份閱讀了一本關於PHP的書,他們基本上給出了關於SQL的每章使用SELECT *的一章。過去幾周,當我有空休息時,爲我和我的朋友製作了這個網站,但我學到了更多關於SQL的知識,這太瘋狂了。非常感謝這一點,任何優化我的查詢幫助了很多! – user1053263 2012-03-19 20:15:37

+1

@ user1053263,有非常好的SQL書籍。閱讀任何只處理MySQL的問題,然後獲取[SQL反模式](http://pragprog.com/book/bksqla/sql-antipatterns)..這是爲了高級用途。所有聲稱教你MySQL和PHP的書都不如「學習C三天」的書籍更好。 – 2012-03-19 20:44:22

1

這(我只是猜測的模式和需求)可能是您的情況更好的查詢:

SELECT a.id,a.FirstName,b.LastName 
FROM tableA a 
JOIN tableB b ON b.id = a.id 
WHERE a.age = '36' 
+0

您的加入條件存在問題 – 2012-03-19 20:03:27

+0

@tereško可隨意進行任何您認爲有用的更正。我不知道他需要什麼樣的連接。也許一個INNER更好,是的 – 2012-03-19 20:06:21

+0

是真的,但這一個將加入兩個主鍵..假設他有主鍵 – 2012-03-19 20:07:30