Php 按类别排序

Php 按类别排序,php,mysql,categories,Php,Mysql,Categories,我想要的结果是: 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_parent

我想要的结果是:

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>";
    }
}

感谢我能得到的任何帮助

您需要使第二个查询的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>";
    }
}
$get\u campaign=mysql\u查询(“按活动id描述从活动订单中选择*)
或者死(mysql_error());
而($row=mysql\u fetch\u数组($get\u活动)){
echo$row['campaign_name']。“
”; $get\u offers=mysql\u query(“选择*来自活动id=“.$row['campaign\u id']”中的活动id描述的订单”) 或者死(mysql_error()); 而($offerRow=mysql\u fetch\u assoc($get\u offers)){ echo$offerRow['offer_name']。“
”; } }
注意,我假设活动表中的主键列是“id”。您也可以通过一个连接在一个查询中执行此操作,并且只使用一个循环,但根据数据的大小和您从第一个表中实际返回的数据量,两个循环对于性能更为有利。

您可以使用一个查询:

$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>";
}
$campaign='';
while($row=mysql\u fetch\u array($query)){
//仅当其不是$campaign时才显示活动名称
如果($row['campaign_name']!=$campaign){
echo$row['campaign_name']。“
”; $campaign=$row['campaign_name']; } echo$row['offer_name']。“
”; }

注意:我必须说您使用的列名称选择不当。如果您在offer表中引用活动表,您应该选择类似于offers.campaign_id的内容。原因是您现在知道您需要什么,但是当您获得更多表和列时,如果不先查看PHP代码,就很难在表之间选择正确的列连接。它可以为您(以及其他使用您的代码的人)节省大量时间。

您应该停止使用
mysql.*
函数。他们被弃用了。改为使用(从PHP5.1开始支持)或(从PHP4.1开始支持)。如果您不确定使用哪一个,请不要使用
mysql.*
函数来编写新代码。它们不再得到维护,社区已经开始。看到了吗?相反,你应该学习并使用或。如果你不能决定哪一个,我会帮你的。如果选择PDO,。请查看第二次查询的结果。这可能就是你需要循环阅读的全部内容。我会检查一下这些文章,看看我能不能从中有所收获,非常感谢!campaign_id是主要的,offer_id也是主要的,$row['id']应该是哪一个?@amoudhgz,向他解释为什么列名称选择不当。我同意你的观点,但解释它有助于教学目的,这样我们都能从知识中受益。
$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>";
}