SQL显示多个类别中的所有条目

时间:2009-09-28 11:06:03

标签: php sql join group-by

我正在三个表上编写一个sql查询,查找并显示每个类别中的类别和所有条目

例如

第1类 帖子1 帖子2 帖子3 发布4

第2类 帖子5 发布6

第3类 发布7 发布8

我有类别显示,但每个只能获得一个项目。任何人都可以提出更好的方法吗?

$sql = "SELECT c.CategoryDescription, f.Description, l.FileID, l.CategoryID FROM 
FileCategories c, Files f, FilesLK l WHERE
c.PictureCategoryID IN (58, 59, 60, 61, 62, 63) AND 
c.PictureCategoryID = l.CategoryID AND
f.ID = l.FileID
GROUP BY c.CategoryDescription";

while($row = mysql_fetch_array($result)) {
  $html .= '<h3><a href="#">'.$row['CategoryDescription'].'</a></h3>
  <div>'.$row['Description'].'</div>';
}

由于

2 个答案:

答案 0 :(得分:1)

你的GROUP BY c.CategoryDe​​scription确保每个类别只有一个帖子。无法真正减少这样的行。为什么不在循环中加入一些逻辑以使其变得更加智能。

$thiscat = '';
while($row = mysql_fetch_array($result)) {
  if($thiscat != $row['CategoryDescription']) {
    $thiscat = $row['CategoryDescription'];
    $html .= '<h3><a href="#">'.$thiscat.'</a></h3>';
  }
  $html .= '<div>'.$row['Description'].'</div>';
}

如果从SQL中删除组并将循环更改为此,则仅在类别说明更改时才打印标题行。

我个人建议你这样写:

$thiscat = '';
while(list($cat,$desc,$fileid,$catid) = mysql_fetch_row($result)) {
  if($thiscat != $cat) {
    $thiscat = $cat;
    $html .= "<h3><a href=\"#\">$thiscat</a></h3>";
  }
  $html .= "<div>$desc</div>";
}

只需使用转义双引号或单引号标记属性就可以了,但更简洁,更容易阅读/排除故障...恕我直言。

HTH:)

答案 1 :(得分:0)

抱歉,这是基本布局,省略了一些不相关的字段:

FileCategories
ID | CategoryDescription


Files
ID | Description

FilesLK
FileID | CategoryID