sql >> Databáze >  >> RDS >> Mysql

Mohu stránkovat vlastní dotaz bez přepsání výchozího stránkování?

Vlastně, pokud to MŮŽETE udělat s find, MŮŽETE to udělat s stránkováním. Můžete se podívat zde

Ale abyste byli konkrétnější, můžete do funkce stránkování přidat podmínky/limit/pole/obsah/pořadí atd., které používáte při hledání.

V stránkování jsem skupinu nepoužil, ale MĚLO by to fungovat :D

Ve vašem případě budete mít něco takového:

$this->paginate = array(
   'fields' => array(
        'Product.category_id',
        'COUNT(Product.hotel_id) as total'
    ),
   'group' => array(
        'Product.category_id HAVING COUNT(Product.hotel_id) > 1')
    )
);

$data = $this->paginate('Product');

Doufám, že to bude fungovat, napište komentář k vašemu výsledku, pokud to nebude fungovat, budete ho muset přepsat, protože nepřijímá podmínku skupiny... i když si myslím, že to bude fungovat, protože stránkování je nakonec nález.

EDIT:

Můžete zkusit udělat něco takového:

Přepište paginate() a paginateCount(), ale pomocí vyladění podmínku propasírujte, abyste mohli zjistit, zda jde o stránkování s ma nebo ne. Něco jako toto:

function paginate($conditions, $fields, $order, $limit, $page = 1, $recursive = null, $extra = array()){
   //if no having conditions set return the parent paginate 
   if (empty($conditions['having'])
       return parent::paginate($conditions, $fields, $order, $limit, $page, $recursive, $extra)
   //if having conditions set return your override

//override code here

}

Pak uděláte něco podobného v paginateCount(), takže máte selektivní stránkování. nezapomeňte provést nenastavené $conditions['having'], jakmile to není potřeba, nebo je nezapomeňte umístit někam, kde to neovlivní vaše hledání;)



  1. Jak počítat se sjednocovacím dotazem

  2. Laravel 5:synchronizace dalšího pole přes pivot

  3. Možné způsoby, jak opravit problém s poškozením metadat serveru SQL Server

  4. Jak zrušíte všechna aktuální připojení k databázi SQL Server 2005?