mysql + php外键显示数据

时间:2012-10-12 11:37:59

标签: php mysql foreign-keys

我有5张桌子。

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中显示数据呢? 感谢

2 个答案:

答案 0 :(得分: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.
    

    请注意,如果某些外键可能是NULL,您可能希望使用outer joins

  3.   

    如何在php中显示数据?

    连接MySQL,执行查询,然后遍历结果集:

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

    请小心避免SQL注入攻击,使用prepared statements将用户输入作为参数传递给SQL,这些参数不会被SQL评估!如果您不知道我在说什么,请阅读Bobby Tables的故事。

答案 1 :(得分: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'