2012-03-19 70 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