如何正确分组/排序mysql表

时间:2010-11-27 13:36:34

标签: php mysql

我需要一些帮助来理解一些“下一级”mysql / php命令,不仅仅是简单的查询语句和循环数组。

我有一张表格,其中包含各种教员编写的出版物。它们都存储在一起,并且有一个faculty_id列告诉我哪个出版物属于哪个教师。在“生物”网页上,我想要检索这些出版物......没问题吧?我遇到的问题是如何显示它们:按“年”列分组,以年份为标题。因此,例如,输出将如下所示:

2010

  • 出版1
  • 出版2

2009

  • 出版1
  • 出版2

2007 //假设2008年没有酒吧

  • 出版1
  • ...等

这是我开始的地方,我还能做些什么来提高效率?或者有没有办法使用PHP从这个查询创建一个多维数组?

"SELECT bibliography,year,link,position FROM faculty_pubs WHERE faculty_id='$faculty_id' AND status=1 ORDER BY year DESC, position ASC"

2 个答案:

答案 0 :(得分:1)

如果您将其存储在单个平面表中,那么按年显示它们纯属“显示”问题。您的查询会吐出如下结果:

| bibliography | year | link       | position |
-----------------------------------------------
| blah blah    | 2008 | http://... | ???      |
| blah blah    | 2009 | http://... | ???      |
| blah blah    | 2009 | http://... | ???      |
| blah blah    | 2010 | http://... | ???      |
etc...

你只需循环结果,跟踪年份,每当新年纪录显示时,做你需要的任何格式(新< ul>,新表,无论......)。

$previous_year = null;
while($row = mysql_fetch_assoc()) {
     if ($previous_year != $row['year']) {
         // start a new year
     }
     ... display publication
     $previous_year = $row['year']
}

答案 1 :(得分:1)

好吧,看起来你不需要分组。您可以通过浏览MySQL结果,在php中创建基于年份的出版物数组。没有测试过一点,但我希望你能得到这个想法。您可以在查询解析中执行此操作,如Marc B所示......根据我们所讨论的出版物数量,这可能会更好。

$publications = array();
$q = mysql_query("SELECT `bibliography`,`year`,`link`,`position` FROM `faculty_pubs` WHERE `faculty_id`='$faculty_id' AND `status`=1 ORDER BY `year` DESC, `position` ASC");
while($r = mysql_fetch_assoc($q)) {
 // separate publication out by year
 $publications[$r['year']][] = $r;
}

// no need to sort the array since all the results were put in order by the SQL sorting
foreach($publications as $year => $pub) {
 echo '<p>'.$year.'</p>';
 echo '<ul>';
 foreach($pub as $p) {
  echo '<li><a href="'.$p['link'].'">Publication title or position here</a></li>';
 }
 echo '</ul>';
}