-1

私が望む結果:

campaign 1
  offer 1.1
  offer 1.2
  offer 1.3
  (and so forth)

campaign 2
  offer 2.1
  offer 2.2
  offer 2.3
  (and so forth)

これらは私のテーブルです:

campaign (tablename)
  campaign_id (used)
  campaign_name

offer (tablename)
  offer_id
  offer_parentid (uses category_id find which category the item is supposed to be paired 
with.)
  offer_name

私は 2 つのテーブルを使用した経験がほとんどありませんが、このような場合に便利だと思います。私の問題は、私が知っている php のすべての側面を試しましたが、必要な結果が得られないことです。これが数時間の血と汗と涙の末の私の最終結果です。

$get_campaign = mysql_query("SELECT * FROM campaign ORDER BY campaign_id DESC")
  or die(mysql_error());

$get_offers = mysql_query("SELECT * FROM offers JOIN campaign ON     offers.offer_parentid=campaign.campaign_id ORDER BY campaign_id DESC ")
  or die(mysql_error());

while($row = mysql_fetch_array($get_campaign)){
echo $row['campaign_name']."</br>";
while($row = mysql_fetch_assoc($get_offers)){
  echo $row['offer_name']."</br>";
    }
}

結果は次のようになります。

Campaign 1
 offer 1.1
 offer 1.2
 offer 2.1
 offer 2.2
campaign 2

私が得ることができる助けをありがとう

4

2 に答える 2

0

1 つのクエリを使用できます。

$query = 'SELECT c.campaign_name, o.offer_name
FROM campaign c
  INNER JOIN offers o ON (o.offer_parentid = c.campaign_id)
ORDER BY c.campaign_id';

結果をループします。

$campaign = '';
while($row = mysql_fetch_array($query)){
  // only display the campaign name when its not $campaign
  if ($row['campaign_name'] != $campaign){
    echo $row['campaign_name']."</br>";
    $campaign = $row['campaign_name'];
  }
  echo $row['offer_name']."</br>";
}

注: 不適切な列名を使用していると言わざるを得ません。offer テーブルでキャンペーン テーブルを参照する場合は、offers.campaign_id のようなものを選択する必要があります。その理由は、現時点では必要なものがわかっているためですが、テーブルと列が増えると、最初に PHP コードを調べずに、テーブル間の適切な列接続を選択するのが難しくなるからです。あなた (およびあなたのコードで作業している他の人) の時間を大幅に節約できます。

于 2012-08-06T20:11:51.860 に答える
0

最初のクエリで条件付きの 2 番目のクエリの SQL を作成する必要があります。

$get_campaign = mysql_query("SELECT * FROM campaign ORDER BY campaign_id DESC")
  or die(mysql_error());


while($row = mysql_fetch_array($get_campaign)){
    echo $row['campaign_name']."</br>";
    $get_offers = mysql_query("SELECT * FROM offers WHERE campaign_id = " . $row['campaign_id'] . " ORDER BY campaign_id DESC ")
  or die(mysql_error());

    while($offerRow = mysql_fetch_assoc($get_offers)){
        echo $offerRow['offer_name']."</br>";
    }
}

キャンペーン テーブルの主キー列が「id」であると想定していることに注意してください。結合を使用して 1 つのクエリでこれを実行し、ループを 1 回だけ行うこともできますが、データのサイズと、最初のテーブルから実際に返される量によっては、パフォーマンスのために 2 回のループが望ましいです。

于 2012-08-06T19:21:29.027 に答える