2012-08-06 88 views
-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 

感謝所有幫助我能得到

+0

你想要什麼結果? – 2012-08-06 19:17:51

+0

你應該停止使用'mysql_ *'函數。他們正在被棄用。請使用[PDO](http://php.net/manual/en/book.pdo.php)(自PHP 5.1起支持)或[mysqli](http://php.net/manual/en/book)。 mysqli.php)(自PHP 4.1起支持)。如果你不確定使用哪一個,[閱讀這篇文章](http://stackoverflow.com/questions/13569/mysqli-or-pdo-what-are-the-pros-and-cons)。 – Matt 2012-08-06 19:19:30

+0

請不要使用'mysql_ *'函數來編寫新的代碼。他們不再維護,社區已經開始[棄用程序](http://goo.gl/KJveJ)。請參閱* [紅盒子](http://goo.gl/GPmFd)*?相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定哪些,[這篇文章](http://goo.gl/3gqF9)會幫助你。如果你選擇PDO,[這裏是很好的教程](http://goo.gl/vFWnC)。 – 2012-08-06 19:19:56

回答

0

你需要讓你的SQL for your second query conditional on the first query:

$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」。你也可以用一個連接在一個查詢中做到這一點,只是有一個循環,但取決於數據的大小和你真正從第一個表返回的數量,兩個循環對於性能來說更可取。

+0

campaign_id是主要的,offer_id也是這樣,哪一個應該是$ row ['id']? – DarkDomination 2012-08-06 19:47:48

+0

我更新了答案。它應該是$ row ['campaign_id'] – davidethell 2012-08-06 20:12:50

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

注:我必須說,你用choosen不佳列名。如果您參考商品表中的廣告系列表,則應選擇諸如offers.campaign_id之類的內容。原因在於你現在知道你需要什麼,但是當你獲得更多的表和列時,很難在表中選擇正確的列連接而不先查看你的PHP代碼。它可以節省您(和其他與您的代碼一起工作的人)很多時間。

+0

@amoudhgz,向他解釋爲什麼列名選擇不當。我同意你的看法,但它有助於教學目的解釋它,這樣我們都可以從這些知識中受益。 – davidethell 2012-08-06 20:13:58