0

我有两张桌子classifiedsstate.

分类广告 -id, title, state_id

状态 -id, statename

我正在尝试从州中呼出州名。我试过这个查询,但它只回显最后一行。

    <?php
    $query  = "SELECT * FROM classifieds ";
    $result = mysql_query($query) or die(mysql_query());
    while($row = mysql_fetch_array($result, MYSQL_ASSOC))
    {
   ?>

    <div>
   <span>Title: <?php echo $row['title'];?> </span>
    </div>

   <div>
   <span>Name: <?php echo $row['name'];?> </span>
    </div>

      $q = mysql_query("SELECT * FROM classifieds AS C
    LEFT JOIN  state AS S
    ON C.state_id = S.id");
    $z = array();

    while($state=mysql_fetch_array($q))
     {
      array_push($z,$state["statename"]);
     }

     ?>
    <div>
    <span>State: <?php foreach($z as $location) { echo $location; } ?></span>

    </div>

  <?php } // End of the first while loop ?>

谢谢

4

4 回答 4

2

您需要在循环echo内移动您的命令。while否则,它只会在遍历所有行后才回显。

 <?php
 $q = mysql_query("SELECT * FROM classifieds AS C
LEFT JOIN  state AS S
ON C.state_id = S.state_id");
 while($state=mysql_fetch_array($q)){
    echo "Location: ".$state["statename"];
 }
 ?>

编辑:使用您更新的代码,我可以看到您的问题是您首先获得所有 的列表classifieds,然后再次获得相同的列表并加入状态。您根本不需要进行第一次查询,只需第二个。

 <?php
 $q = mysql_query("SELECT C.*, S.statename 
       FROM classifieds AS C
       LEFT JOIN  state AS S
       ON C.state_id = S.state_id");
 while($row=mysql_fetch_array($q)){
    echo "Title: ".$row["title"]."<br />";
    echo "Name: ".$row["name"]."<br />";
    echo "Location: ".$state["statename"]."<br />";
 }
 ?>
于 2012-05-29T14:56:11.630 回答
1

您正在覆盖$z每次循环迭代的值。如果它有来自数据库的多个结果,您还需要将 $z 设为一个数组,然后使用 array_push() 将 $state["statename"] 的值附加到 $z

<?php
$q = mysql_query("SELECT * FROM classifieds AS C
    LEFT JOIN  state AS S
    ON C.state_id = S.state_id");

$z = array();

while($state=mysql_fetch_array($q)){
    array_push($z,$state["statename"]);
}
?>

然后在你的循环之后使用它来检查你的数组......

<?php print_r($z); ?>

...这将循环遍历数组并执行您需要的格式

<?php
foreach($z as $location) {
    echo 'Location ' . $location . '<br/>';
}
?>
于 2012-05-29T14:58:53.493 回答
0

您需要将 echo 语句放在 while 循环中。

于 2012-05-29T14:56:45.100 回答
0

尝试这个:

<?php
     $q = mysql_query("SELECT * FROM classifieds AS C LEFT JOIN  state AS S ON C.state_id = S.state_id");

      while($state=mysql_fetch_array($q))
      {
           $z =$state["statename"];
           echo "Location: " . $z . PHP_EOL;
      }
 ?>

在您的原始代码中,循环外的 echo 语句只会执行一次,即只会显示最后一次$z分配的时间。将它放在循环中可确保它将为每一行数据执行。

于 2012-05-29T14:57:06.627 回答