我需要一些帮助来理解一些“下一级”mysql / php命令,不仅仅是简单的查询语句和循环数组。
我有一张表格,其中包含各种教员编写的出版物。它们都存储在一起,并且有一个faculty_id列告诉我哪个出版物属于哪个教师。在“生物”网页上,我想要检索这些出版物......没问题吧?我遇到的问题是如何显示它们:按“年”列分组,以年份为标题。因此,例如,输出将如下所示:
2010
2009
2007 //假设2008年没有酒吧
这是我开始的地方,我还能做些什么来提高效率?或者有没有办法使用PHP从这个查询创建一个多维数组?
"SELECT bibliography,year,link,position FROM faculty_pubs WHERE faculty_id='$faculty_id' AND status=1 ORDER BY year DESC, position ASC"
答案 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>';
}