2012-05-29 71 views
0

我有兩個表classifiedsstatemysql左加入回聲最後一行

公告 - id, title, state_id

狀態 - id, statename

我想呼應了由國營的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 ?> 

感謝

回答

2

你需要移動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 />"; 
} 
?> 
+0

仍然回聲所有狀態的格式。我更新了我的代碼的方式。 – Rocks

+0

@Rocks:好吧,現在我想我明白你想達到什麼。我更新了我的答案。 – Kaivosukeltaja

+1

Kaivosukeltaja你我的英雄,也感謝其他人。 – Rocks

0

您需要將echo語句放在while循環中。

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被分配將被顯示。將其放置在循環內部可確保它將針對每一行數據執行。

1

您在每次循環迭代時都會覆蓋$z的值。如果它會從數據庫中的多個結果,你會希望$ z中的一個陣列爲好,然後用array_push()到$狀態[「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/>'; 
} 
?> 
+0

現在打印結果如下:Array([0] => Texas [1] => Arizona [2] =>明尼蘇達州) – Rocks

+0

啊,是的,我已經更新了答案。如果你的代碼不在同一個文件中,這很有用。這通常是如何構建MVC項目或使用HTML模板,其中數據庫交互與顯示邏輯不在同一個「php」頁面上。 – Brad

+0

我的代碼全部在一個文件中。我已經按照我擁有的方式更新了代碼。 – Rocks