2012-10-12 51 views
0

我有5個表格。mysql + php外鍵顯示數據

 
advertisingcompany Table 
    id PK 
    name 

placement Table 
    id PK 
    name 

advertiser Table 
    id PK 
    name 

location Table 
    id PK 
    name 

ads Table 
    ad_id PK 
    size 
    price 
    advertisingcompanyId FG 
    placementId FG 
    advertiserId FG 
    locationId FG 

我想不出如何顯示外鍵數據。例如,我可以獲得「advertisingcompanyId」或「placementId」,但問題是要獲取廣告公司名稱中的廣告公司的名稱或位於展示位置表中的展示位置名稱。

我試圖與該查詢:

$query = "SELECT ad_id, size, price, ads.advertisingcompanyId, ads.placementId, ads.advertiserId, locationId 
      FROM ads 
      INNER JOIN advertisingcompany ON ads.advertisingcompanyId = advertisingcompany.id 
      WHERE ad_id = '$ad_id'"; 

是對於數據的正確SQL查詢我想要的?如果它是我如何添加到該查詢,我會得到所有外鍵的名稱? 那我該如何在php中顯示這些數據? 感謝

回答

1
  1. 是對於數據的正確SQL查詢我想要的?

    是的。

  2. 如果是我該如何添加到該查詢我將獲得所有外鍵的名稱?

    指定您希望選擇的名稱列,並添加addiitonal JOIN條款:

    SELECT ads.*, 
         advertisingcompany.name AS adco, 
         placement.name   AS placement 
    FROM ads JOIN advertisingcompany ON ... 
          JOIN placement   ON ... 
    -- etc. 
    

    請注意,您不妨用outer joins如果一些外鍵的可能是NULL

  3. 我該如何在php中顯示數據?

    連接到MySQL,執行查詢,然後在結果集循環:

    $dbh = new PDO("mysql:dbname=$dbname;charset=utf8", $username, $password); 
    $qry = $dbh->query($query); 
    while($row = $qry->fetch()) print_r($row); 
    

    請小心使用prepared statements避免SQL注入攻擊在其中傳遞用戶輸入不得到參數評估SQL!如果你不知道我在說什麼,請閱讀Bobby Tables的故事。

0
SELECT ad_id, size, price, 
     c.name as company_name, 
     p.name as placement_name, 
     a.name as advertiser_name, 
     locationId 
FROM ads 
INNER JOIN advertisingcompany c ON ads.advertisingcompanyId = c.id 
INNER JOIN placement p ON ads.placementId = p.id 
INNER JOIN advertiser a ON ads.advertiserId = a.id 
WHERE ad_id = '$ad_id'