我正在三个表上编写一个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>';
}
由于
答案 0 :(得分:1)
你的GROUP BY c.CategoryDescription确保每个类别只有一个帖子。无法真正减少这样的行。为什么不在循环中加入一些逻辑以使其变得更加智能。
$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