-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

我几乎没有使用两张桌子的经验,但我发现它对这种事情很有用。我的问题是我已经尝试了我所知道的 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

您需要使您的第二个查询的 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”。您也可以在一个带有连接的查询中执行此操作,并且只有一个循环,但根据数据的大小和您从第一个表实际返回的数量,两个循环对于性能来说是更可取的。

于 2012-08-06T19:21:29.027 回答
0

您可以使用一个查询:

$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.campaign_id 的内容。原因是此时您知道自己需要什么,但是当您获得更多表和列时,如果不先查看 PHP 代码,就很难在表之间选择正确的列连接。它可以为您(以及使用您的代码的其他人)节省大量时间。

于 2012-08-06T20:11:51.860 回答