2011-07-30 77 views
0

小组和分组我有表数据库:的foreach在PHP

Group: 
    | id | Category | title | 
    | 1 | 1  | group1 | 
    | 2 | 2  | group2 | 
    | 3 | 1  | group3 | 
    | 4 | 3  | group4 | 
    | 5 | 2  | group5 | 
    | 6 | 1  | group6 | 

News: 
    | id | Group | title | body | 
    | 1 | 3  | title1 | body1 | 
    | 2 | 2  | title2 | body2 | 
    | 3 | 1  | title3 | body3 | 
    | 4 | 4  | title4 | body4 | 
    | 5 | 1  | title5 | body5 | 
    | 6 | 5  | title6 | body6 | 
    | 7 | 3  | title7 | body7 | 
    | 8 | 2  | title8 | body8 | 
    | 9 | 1  | title9 | body9 | 
    | 10 | 6  | title10| body10 | 
    | 11 | 1  | title11| body11 | 
    | 12 | 5  | title12| body12 | 

我该怎么让这个为:

-GROUP1, GROUP3 and GROUP6 
//GROUP1 (category1) 
--title3 
--title5 
--title9 
//GROUP3 (category1) 
--title1 
--title7 
//GROUP6 (category1) 
--title10 
-GROUP2 and GROUP5 
//GROUP2 (category2) 
--title2 
--title8 
//GROUP5 (category2) 
--title6 
--titl12 
-GROUP4 
//GROUP4 (category3) 
--title4 

我会的foreach使这个。感谢帮助!

+0

那么,什么是赏金? (:?这是众所周知的根本任务及其算法也是知名 – heximal

+0

请告诉我问题/问题只是发布了一堆代码,更多的是一种懒惰的标志,但不是一个问题 – KingCrunch

+1

@KC懒惰是一个问题 –

回答

1

您的具体要求的输出,所以复杂。

$sql = 'SELECT n.title, n.Group AS group_id, g.Category AS cat_id 
     FROM News AS n 
     JOIN Group AS g ON g.id = group_id 
     ORDER BY cat_id, group_id, n.id'; 

$result = mysql_query($query); 

$categories = array(); 

while ($row = mysql_fetch_assoc($result)) { 
    $catID = $row['cat_id']; 
    $groupID = $row['group_id']; 
    $title = $row['title']; 

    $categories[$catID]['groups'][$groupID]['titles'][] = $title; 
} 

foreach ($categories as $catID => $groups) { 

    $catGroups = '-GROUP'.implode(', GROUP',array_keys($groups)).PHP_EOL; 
    $lastComma = strrpos($catGroups,','); 
    if ($lastComma !== false) { 
     $catGroups = substr($catGroups,0,$lastComma-1). 
        ' AND ' .substr($catGroups,$lastComma+1); 
    } 
    echo $catGroups; 

    foreach ($groups as $groupID => $titles) { 
     echo "//GROUP$groupID (category$catID)".PHP_EOL; 
     foreach ($groups as $group => $titles) { 
      echo '--'.$title.PHP_EOL; 
     } 
    } 
} 

如果你不需要这种奇特的输出,这将会简单得多。

$sql = 'SELECT n.title, n.Group AS group_id, g.Category AS cat_id 
     FROM News AS n 
     JOIN Group AS g ON g.id = group_id 
     ORDER BY cat_id, group_id, n.id'; 

$result = mysql_query($query); 

$lastCatID = null; 
$lastGroupID = null; 

while ($row = mysql_fetch_assoc($result)) { 
    $catID = $row['cat_id']; 
    $groupID = $row['group_id']; 
    $title = $row['title']; 

    if ($catID !== $lastCatID){ 
     echo "*** CATEGORY $catID\n"; 
     $lastCatID = $catID; 
    } 
    if ($groupID !== $lastGroupID){ 
     echo "GROUP $groupID\n"; 
     $lastGroupID = $groupID; 
    } 
    echo "-- $title\n"; 
} 
+0

非常感谢您的帮助:)这很难,但是谢谢:) –

1

你告诉你,你在数据库中有你的价值。所以你必须先拿到他们,例如通过以下数据库查询:

SELECT 
    g.`title` AS `group_title` 
    , n.`title` AS `news_title` 
FROM 
    `Group` AS g 
INNER JOIN 
    `News` AS n 
ON 
    g.`id` = n.`Group` 
ORDER BY 
    g.`Category` 
    , n.`Group` 
    , n.`title` 

将数据存储在数组中。现在你可以使用foreach循环遍历数组。

=== 这里我更新:

首先填充数组,而从数据库(例如查询见上文)读书。

<?php 
$data = array(); 
$res = mysql_query('SELECT ...'); 
while (($row = mysql_fetch_assoc($res)) !== false) { 
    $data[$row['group_title']][] = $row['news_title']; 
} 
?> 

则数组写入到屏幕上:

<?php 
foreach ($data as $group_title => $groups) { 
    echo $group_title . "\n"; 
    foreach ($groups as $news) { 
     echo "\t" . $news . "\n"; 
    } 
} 
?> 
+0

这我只想获得数据库,并且我想添加PHP组名称。<?php echo $ groupName;?><?php echo $ title etc?> –