2010-11-27 93 views
0

除了简单的查询语句和循环访问数组之外​​,我需要一些帮助来理解一些“下一级”mysql/php命令。如何正确地对mysql表进行分组/排序

我有一张表,其中包含由各位教员撰写的出版物。它们全部存储在一起,并且有一个faculty_id列可以告诉我哪个出版物属于哪个教员。在“生物”网页上,我想检索这些出版物......没问题吧?我遇到的问题是如何显示它们:按“年份”列将年份分组为标题。因此,举例来说,输出应该是这样的:

  • 公布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" 
+0

我应该提到表中有一个名为“id”的主键,但它没有在任何地方使用,所以我没有打扰将它包括在查询中。对于任何感兴趣的人来说,“链接”将成为某处出版物的在线出版物的URL(如果存在),“status”是1/0值,它可以让教师从他们的列表中“隐藏”出版物,“position”是一个jQuery可排序功能,可以让他们安排他们想要的发布列表(与“id”或标题相对) – 2010-11-27 13:39:42

回答

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>'; 
} 
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'] 
} 
+0

谢谢哟!对于这个特定的网页,我想你是正确的,我可以在显示器上轻松操作。但是知道如何处理这些数据并将其重新组织到这些组中会非常有帮助。 – 2010-11-27 13:51:06

+1

SQL用于检索数据,而不是格式化它。正确的问题在正确的层。感谢,亚伦, – Donnie 2010-11-27 13:52:29

相关问题