2012-08-16 43 views
0

我正在尋找解決這個問題的相當長一段時間,問一個相關的問題,但沒有運氣。我會試着非常直截了當地指出,也許有人可以闡明一些看法。Php或MYSQL解決方案如何根據條件交替顯示MYSQL數據

如果這個問題得到一個有效的答案,我會刪除類似的。 我相信這個問題更清楚。

在數據庫表中我存儲了有關「二手車」的數據。

可以說我有5 BMW二手車(我希望:),4梅賽德斯20 Vauxhalls

它們在表格中按rand排序。

我查詢了數據並對其應用了分頁,顯示每頁6個汽車(共5頁)。

如何顯示這樣的數據:

第1頁:

  • BMW第一款,第一輛梅賽德斯,首先沃克斯豪爾,
  • 其次寶馬,其次奔馳,二沃克斯豪爾

第2頁:

  • 三寶馬,三奔馳,三沃克斯豪爾,
  • 四寶馬,四奔馳,四沃克斯豪爾

第3頁:

  • 第五寶馬,第五沃克斯豪爾,第六沃克斯豪爾,
  • 第七沃克斯豪爾,八沃克斯豪爾Vauxhall的夜晚

頁4和5:

  • 將顯示所有剩餘的Vauxhalls。

    1. 有些人說這可以通過使用非常複雜的mysql查詢來完成,這需要永遠執行。看看這個堆棧問題here

    2. 對於類似的問題,用戶newfurniturey給出solution,但它沒有奏效。我想我的問題不清楚。我非常感謝他。

+0

如何爲每種車型分配一張桌子?然後你可以很容易地知道你有多少輛汽車,並從那裏算出算法。 – thatidiotguy 2012-08-16 19:42:59

+0

我認爲你想要輸出的標準不是很清楚。你是否想要獲得儘可能少的重複車的成績?換句話說,你想首先展示品種,並且在類別底部留下相同的品牌。正確? – JYelton 2012-08-16 19:44:20

+0

一個有趣的問題,我想不出一個可以很好擴展的解決方案。在您的實際應用程序中,您預計會返回多少行?不是每頁,但總共? – invertedSpear 2012-08-16 21:09:37

回答

0

所以,你有一個類別(MAKE)和車輛(車輛ID),並希望每個頁面顯示一輛車從每一個做,除非有沒有更多的車輛留在使?

假設你有一個表Vehicles與領域makevin

先找到品牌:

$q = "SELECT make FROM Vehicles" 
$r=mysqli_query($dbconnect, $q); 
$make= mysqli_fetch_array($r, MYSQLI_ASSOC); 
array_unshift($make, "nomake"); //add so the first make is not a position zero 

然後,建立一個與VIN相匹配的製造陣列:

$q = "SELECT make, vin FROM Vehicles ORDER BY make" 
$r=mysqli_query($dbconnect, $q); 
while($record = mysqli_fetch_array($r, MYSQLI_ASSOC)){ 
    $vehicle[$record['vin']]=$record['make']; 
} 

然後,按您的頁面順序構建您的陣列:

$onpage=0; 
$numperpage = 5; //number of vehicles per page 
foreach($vehicle as $vkey => $vvalue){ 
    if (array_search($vvalue,$lastvalue)){ 
    $finalorder[$vkey] = $vvalue; 
    $lastvalue[$onpage]= $vvalue; 
    $onpage=$onpage<$numperpage?$onpage++:0; 
    } 
    if($onpage==0){ 
    unset($lastvalue); 
    } 
} 
var_dump($finalorder); 

這可能需要一點清理,但它應該工作。

+0

這與我的想法非常接近,但不能很好地擴展。如果有大量的記錄,我們必須立即將它們全部取出,這種方式會破壞分頁。但我沒有真正看到任何其他方式。 – invertedSpear 2012-08-16 21:16:27

+0

我剛剛注意到if後沒有'else'。這也是必需的,否則你會忽略那些不合適的車輛。我認爲你需要另一個數組來添加它們,然後array_push它們到最後。這有點像泡泡。 – Sablefoste 2012-08-16 21:19:55

+0

有很多排序和組織進行許多記錄。它不能被幫助;你要求電腦做很多工作。 – Sablefoste 2012-08-16 21:20:49