我有两个表classifieds
和state
。
分类广告 - 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 ?>
谢谢
您需要在
while
循环中移动echo
命令。否则,它只会在遍历所有行后回显。
<?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 />";
}
?>
您在每次循环迭代中都过度处理了$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/>';
}
?>
您需要将 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))
{
$z =$state["statename"];
echo "Location: " . $z . PHP_EOL;
}
?>
在原始代码中,循环外的 echo 语句只会执行一次,即只显示上次分配$z
的时间。将其放置在循环中可确保对每一行数据执行它。