2010-11-27 90 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

相關問題