sql >> Database teknologi >  >> RDS >> Mysql

Kan jeg paginere en brugerdefineret forespørgsel uden at tilsidesætte standardpagineringen?

Faktisk, hvis du KAN gøre det med find, KAN du gøre det med paginering. Du kan tage et kig her

Men for at være mere specifik kan du tilføje de betingelser/grænse/felter/contain/ordre osv., som du bruger i find, til sideinddelingsfunktionen.

Jeg har ikke brugt gruppe i paginen men det SKAL virke :D

I dit tilfælde vil du have noget som dette:

$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');

Håber det virker, skriv en kommentar til dit resultat, hvis det ikke virker bliver du nødt til at tilsidesætte det, for det accepterer ikke gruppebetingelsen... selvom jeg tror det vil virke, da paginering er et fund i sidste ende.

EDIT:

Du kan prøve at gøre noget som dette:

Tilsidesæt paginate() og paginateCount(), men med en tweak, snig en betingelse, så du kan se, om det er en paginering med at have eller ej. Noget som dette:

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

}

Så gør du noget lignende i paginateCount(), på den måde har du en selektiv paginering. husk at gøre unset $betingelser['having'], når det ikke er nødvendigt, eller husk at placere det et sted, der ikke påvirker dit fund;)



  1. SQL til at generere en liste over tal fra 1 til 100

  2. Sådan indstilles MariaDB til at bruge vertikalt output

  3. Oracle 11g får alle matchede forekomster af et regulært udtryk

  4. MySQL Prepared Statement - Sådan går du igennem