2016-11-25 31 views
0

我的問題是,我有類似下面的那些值的數據庫:\限制分頁基於具有相同名稱的條目數

|Entries|Name| 
|12  |Bob | 
|14  |Bob | 
|15  |Bob | 
|27  |Kevin| 
|19  |Kevin| 
|29  |Dale| 
|18  |Dale| 
|23  |Dale| 
|13  |Dale| 

我想有分頁每個頁面列出了每個條目名稱。所以會有一個bob頁面,然後下一個頁面會有kevins,然後下一個會有dales。我知道我必須使用限制來達到這個目的,但是我的問題是,當名字(鮑勃,凱文,戴爾)都有不同數量的條目時,我會限制每一頁。

下面是我在頁面中使用的一些php,我只想每頁有12個條目,這可能有幫助,但我只是想在這裏添加它,以防萬一。

$limit = 12; 
$pages = ceil($count/$limit); 
//check to see if pages is smaller than 
$page = min($pages, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, array(
    'options' => array(
     'default' => 1, 
     'min_range' => 1, 
    ), 
))); 
$offset = ($page-1) * $limit; 
$query = "SELECT `actual_quote`,`poster`,`formtype`,`id` FROM `data` WHERE `formtype` = 'Inspirational' LIMIT 13 OFFSET :offset"; 
$stmt = $db->prepare($query); 
$stmt->bindParam(':offset', $offset, PDO::PARAM_INT); 
$stmt->execute(); 
+0

先使用「GROUP BY」,然後分別爲每個頁面選擇條目。此外,我沒有看到您提供的查詢和上面的數據表的聯繫 – rbr94

+0

我們可以幫助解決您的問題嗎?任何反饋將不勝感激 – rbr94

回答

0

要顯示的頁面,你可以簡單地選擇不同的名稱:

$query = "SELECT DISTINCT `Name` FROM `my_table` ORDER BY Name ASC"; 
$stmt = $db->prepare($query); 
$stmt->execute(); 
$rows = $stmt->fetchAll(); 

for ($i = 1; $i <= count($rows); $i++) { 
    $row = $rows[$i - 1]; 
    echo '<a href="?page=' . $i . '&name=' . $row['Name'] . '">Page ' . $i . ' (' . $row['Name'] . ')</a>'; 
} 

在每個頁面,您可以使用name參數僅獲取該名稱的結果。

0

我只提供了一個示例策略。

首先你需要GROUP BY你的名字在你的表中。

SELECT name, COUNT(*) as cnt 
FROM YourTable 
GROUP BY name 

有了這個結果,你就知道了你需要的頁面/標籤的數量。您需要參考每個頁面選項卡的名稱。在每個頁面選項卡上,您現在可以爲每個名稱選擇匹配的條目:

您獲得的第一條記錄包含名稱'Kevin'。然後,您可以執行以下操作來選擇條目:

SELECT column1, column2, ... 
FROM YourTable 
WHERE name = 'Kevin' 

您需要對上述基本查詢獲得的所有不同名稱繼續使用此方法。

我希望我能幫助你。

0

使用DISTINCT關鍵字將返回沒有重複的條目。

SELECT DISTINCT column_name,column_name 
FROM table_name; 
相關問題