0

我有 5 张桌子。

广告公司表
  身份PK
  姓名

安置表
  身份PK
  姓名

广告客户表
  身份PK
  姓名

位置表
  身份PK
  姓名

广告表
  ad_id PK
  尺寸
  价格
  广告公司 ID FG
  位置标识 FG
  广告客户 ID FG
  locationId FG

我不知道如何显示外键数据。例如,我可以获得“advertisingcompanyId”或“placementId”,但问题是获取广告公司表中的广告公司名称或展示位置表中的展示位置名称,而不是 id。

我尝试使用该查询:

$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 中显示该数据?谢谢

4

2 回答 2

1
  1. 这是我想要的数据的正确 SQL 查询吗?

    是的。

  2. 如果是我如何添加到该查询中,我将获得所有外键的名称?

    指定您希望选择的名称列并添加附加JOIN子句:

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

    请注意,如果某些外键可能是,您可能希望使用外连接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);
    

    请小心避免 SQL 注入攻击,方法是使用准备好的语句,将用户输入作为参数传递给这些语句,这些参数不会针对 SQL 进行评估!如果您不知道我在说什么,请阅读Bobby Tables的故事。

于 2012-10-12T11:42:37.150 回答
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'
于 2012-10-12T11:42:49.380 回答