2014-04-26 101 views
0

我在我的數據庫中有兩個表格 - 「區域」和「吸引力」。我做了一個JOIN查詢,它將從它們兩個獲取數據,然後我將其顯示出來。這裏是我的代碼:MySql如何只顯示多個表中的數據一次?

$regionsId = $_GET['region']; 

//$sql = "SELECT `RegionID`, `RegionName` FROM `region` WHERE `RegionID`='$regionsId'"; 
//$sql = "SELECT `AttractionID`, `Name`, `imglink2` FROM `attractions` WHERE `RegionID`='$regionsId'"; 

$sql ="SELECT * 
FROM region 
INNER JOIN attractions WHERE region.RegionID = '$regionsId' AND attractions.RegionID = '$regionsId'"; 


$result = mysql_query($sql, $link); 

if (!$result) { 
    echo "DB Error, could not query the database\n"; 
    echo 'MySQL Error: ' . mysql_error(); 
    exit; 
} 



while ($row = mysql_fetch_assoc($result)) { 

    echo $row['RegionName']; 

    echo "<a href='attraction.php?village=" . $row['AttractionID'] . "'>" . "<br />" . 
      $row['Name'] . 
      "<br />" . 

     "<img src='" . $row['imglink2'] . "' height='130' width='150'> 

     </a>"; 



} 





mysql_free_result($result); 



?> 

我的問題是,當我顯示它echo $ row ['RegionName'];顯示多次,每個景點我都顯示。我怎樣才能讓它只顯示一次? 謝謝。

+1

去看看再加入語法 – Strawberry

+0

那麼你是這麼多的幫助,謝謝.... – user3565574

回答

0

嘗試GROUP BY

$sql =" 
SELECT * 
FROM region 
LEFT JOIN attractions ON region.RegionID = attractions.RegionID 
WHERE region.RegionID = '$regionsId' 
    AND attractions.RegionID = '$regionsId' 
GROUP BY region.RegionID" ; 
+0

這隻顯示一個景點。 – user3565574

+0

確定..'SELECT * FROM 區域 LEFT JOIN景點region.RegionID = attractions.RegionID WHERE region.RegionID = '$ regionsId' 和attractions.RegionID = '$ regionsId' '試試這個 –

+0

不,這不起作用。如果我從While循環中取出RegionName,它根本不顯示它。我不知所措... – user3565574

0

使用此:

$sql = "SELECT DISTINCT * 
FROM region 
    LEFT JOIN attractions ON region.RegionID = attractions.RegionID 
WHERE region.RegionID = '$regionsId' 
    AND attractions.RegionID = '$regionsId' 
GROUP BY region.RegionID"; 
+0

不起作用。 – user3565574

0

這是長註釋了一下。 SQL會以表格形式返回值與所有的「細胞」,填寫完整:

region  attraction 
    A   1 
    A   2 
    A   3 
    B   1 
    B   5 

如果你想在這種形式:

A   1,2,3 
    B   1,5 

那麼數據庫是合適的:

SELECT r.*, group_concat(a.AttractionId) 
FROM region r LEFT JOIN 
    attractions a 
    ON r.RegionID = a.RegionID 
WHERE r.RegionID = '$regionsId' 
GROUP BY r.RegionID; 

如果您想要此格式:

region  attraction 
    A   1 
       2 
       3 
    B   1 
       5 

然後您應該在應用程序層完成這項工作。可以在數據庫中進行設置,但它在處理表格時「違反」SQL的本質。而且,在顯示結果時循環顯示結果很容易。

0
去是添加 order by RegionName到您的查詢,然後更改您的代碼來監視區域的變化,只有當變化發生時,像這樣顯示它

最簡單的方法:在基本

$prevRegionName = ''; // fill variable with something that won't be matched in first comparison 

while ($row = mysql_fetch_assoc($result)) { 

    $currentRegionName = $row['RegionName']; // push current region to variable 
    if ($currentRegionName != $prevRegionName) echo $row['RegionName']; // print region only if it changed 

    echo "<a href='attraction.php?village=" . $row['AttractionID'] . "'>" . "<br />" . 
      $row['Name'] . 
      "<br />" . 

      "<img src='" . $row['imglink2'] . "' height='130' width='150'> 

     </a>"; 


    $prevRegionName = $currentRegionName; // save current region to compare it in next interaction 
    } 
+0

完美!非常感謝!!! – user3565574

+0

如果您認爲我的答案是您正在尋找的答案,請將其標記爲一個。 –

相關問題