0

私は2つのテーブル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 ?>

ありがとう

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ステートメントは1回だけ実行されます。つまり、最後$zに割り当てられた時間が表示されます。ループ内に配置すると、データの各行に対して確実に実行されます。

于 2012-05-29T14:57:06.627 に答える