2012-04-16 58 views
2

例如我创建了2个页面和2个MySQL表格。用php加入两个mysql表格

Index.php & citys.php

全市

ID  City  Country Population 
-------------------------------------- 
1  Amsterdam  NL  1500000 
2  Rotterdam  NL  900000 
3  Dusseldorf DE  1800000 

评论

ID City  Name Comment 
--------------------------------- 
1 Dusseldorf Jack Great city! 
2 Dusseldorf John Beautiful  
3 Rotterdam Emy Love it 

目前我只用表citys这样的:

index.php链接到citys.php有:

<a href='citys.php?cmd=menu&id=";echo $row['id'];echo "'> 

而且citys.php使用此代码从MySQL显示数据:

<?php 
include "connect.php"; 
    if(!isset($cmd)) 
    { 
     if($_GET["cmd"]=="menu" || $_POST["cmd"]=="menu") 
     { 
      if (!isset($_POST["submit"])) 
      { 
      $id = $_GET["id"]; 
      $sql = "SELECT * FROM citys WHERE id=$id"; 
      $result = mysql_query($sql);   
      $row = mysql_fetch_array($result); 
?> 
<?php echo $row["City"] ?> 
<br><br> 
<?php echo $row["Country"] ?> 
<br><br> 
<?php echo $row["Population"] ?> 

直到这里的一切是自我表现和做工精细。

但是我想要完成的还是显示第2页的注释。因此查询必须被编辑以从表comments获得正确的数据。

我试图从互联网上,我已经编辑自己喜欢的不同的例子:

<?php 
include "connect.php"; 
    if(!isset($cmd)) 
    { 
     if($_GET["cmd"]=="menu" || $_POST["cmd"]=="menu") 
     { 
      if (!isset($_POST["submit"])) 
      { 
      $id = $_GET["id"]; 
      $sql = "SELECT citys.*, comments.* FROM citys, comments WHERE citys.id=$id AND comments.city=citys.city"; 
      $result = mysql_query($sql);   
      $row = mysql_fetch_array($result); 
?> 

但没有任何工程。

任何人可以帮忙吗?

编辑!

从VIPIN JAIN答案作品中的查询,但还剩下一个问题:

查询:

$sql = "SELECT * FROM citys LEFT JOIN comments ON comments.city=citys.city WHERE citys.id=$id"; 

如果表“意见”有3行的代码只能说明过去两年,但不第一个:

<?php while($row = mysql_fetch_array($result)) { 
    echo "<br><br>";  
    echo $row['name']; 
    echo "<br>"; 
    echo $row['comment']; 
} 
?> 

如果我尝试这个,它只显示第一行。

<?php echo $row["name"] ?> 
<br> 
<?php echo $row["comment"] ?> 

我不知道为什么第一条记录留在循环中。

+0

的要弄清这个问题,有点可能您发布的表定义。我不确定这些表格是关联的。你在这两个表中都有一个ID,我认为它是主键。但是从我能看到的是,您是否将城市名称放入评论表中作为城市的外键?如果你能向我展示表格定义,我将能够提供帮助。 – Namphibian 2012-04-16 10:32:30

+0

为什么,我只写了一个非常冗长的问题和答案,涵盖了这种[确定的问题](http://stackoverflow.com/questions/12475850/how-can-an-sql-query-return-data-from-多表),我希望这将有助于澄清如何加入表的工作以及如何从数据库中的多个表中获取信息! – Fluffeh 2012-09-18 14:09:00

回答

4

使用此查询

$sql = "SELECT * FROM citys LEFT JOIN comments ON comments.city=citys.city WHERE citys.id=$id"; 

使用leftjoin这类工作

+0

该查询有效,但还有一个问题:如果表“评论”有3行,则此代码仅显示最后两个,但不显示第一个: <?php while($ row = mysql_fetch_array($ result)){echo “

”; \t echo $ row ['name'];回声“
”; echo $ row ['comment']; }?> 如果我尝试<?php echo $ row [“name”]?>
<?php echo $ row [“comment”]?>它只显示第一行。 – Maxcim 2012-04-16 11:38:46

+0

也许你应该使用上述2个查询,因为连接会使程序占用超过所需内存。所以为了更好的选择去多个查询。即城市表和评论表。 – 2012-04-16 11:50:45

+0

如果我使用此<?PHP的回声$行[ “NAAM”]>
<?PHP的回声$行[ “注释”]> <?PHP的 而($行= mysql_fetch_array($结果)) { echo“

”; \t echo $ row ['naam']; echo“
”; echo $ row ['comment']; } ?>它以正确的顺序显示所有评论。我不知道这是否是正确的方式,但它适用于我! Thx寻求帮助。 – Maxcim 2012-04-16 11:58:23

2
select * from citys 
left join comments on comments.city = citys.city 
where citys.id=$id 
+0

您可以使用'LEFT OUTER JOIN'进行condider。如果找不到匹配行,这可以帮助您不会发生错误。 – 2012-04-16 10:33:37