0

私は5つのテーブルを持っています。

アドバタイジングカンパニー テーブル
  IDPK
  名前

配置表
  IDPK
  名前

広告主テーブル
  IDPK
  名前

ロケーション テーブル
  IDPK
  名前

広告テーブル
  ad_id PK
  サイズ
  価格
  広告会社ID FG
  配置 ID FG
  広告主 ID FG
  ロケーション ID FG

外部キー データを表示する方法がわかりません。たとえば、「advertisingcompanyId」または「placementId」を取得できますが、問題はidの代わりにadvertisingcompanyテーブルにあるadvertisingcompanyの名前またはプレースメントテーブルにあるプレースメント名を取得することです。

私はそのクエリで試しました:

$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 に答える