FOUND_ROWS() in dezelfde query SQL_CALC_FOUND_ROWS column

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Francoi gckx

Francoi gckx

30/01/2014 13:45:49
Quote Anchor link
In mijn class haal ik de records op en word meegenomen in de return
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
return $query->fetchAll();

en met pagination wil ik SQL_CALC_FOUND_ROWS gebruiken kan FOUND_ROWS() in dezelfde query worden gebracht.
Anders zou het betekenen dat ik een aparte query boven $query->fetchAll() moet maken met dus SELECT FOUND_ROWS()
alleen ik kan niet allebei met de Return meenemen, hoe kan ik dit als beste oplossen
Gewijzigd op 30/01/2014 13:46:32 door Francoi gckx
 
PHP hulp

PHP hulp

26/04/2024 23:23:48
 
Erwin H

Erwin H

30/01/2014 14:28:11
Quote Anchor link
Ja, je zal twee queries nodig hebben. Het resultaat van SQL_CALC_FOUND_ROWS is namelijk pas bekend na uitvoer van de query.

Wat je kan doen is de twee resultaten samenvoegen. Geef bijvoorbeeld een array met twee elementen terug. Het eerste element de resultaten, het tweede het aantal rijen.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

30/01/2014 14:41:47
Quote Anchor link
Is er geen betere oplossing dan fetchAll() te gebruiken? immers nu worden alle records gelezen en klaar gezet.

In mensentaal:
Ik zou eerst enkel willen weten hoeveel rijen er in de tabel aanwezig zijn zodat ik de pagination kan maken en vervolgens zou ik alleen de rijen opvragen van de rijen die ik op de huidige pagina (met pagina nummer X) wil weergeven. Met de LIMIT clause dus

hoeveel rijen zitten er in mijn tabel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT COUNT(*) FROM table_name;


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php

// bovenstaande query draaien en de uitkomst opslaan in $totalRows
$totalRows = 150; // als voorbeeld
$actualPage = 2; // dit is de tweede pagina
$rowsPerPage = 50 // 50 regels per pagina

$limit1 = $rowsPerPage * ($actualPage - 1);
$limit2 = $rowsPerPage;

echo 'SELECT * FROM table_name LIMIT ' . $limit1 . ', ' . $limit2;
?>
Gewijzigd op 30/01/2014 14:57:46 door Frank Nietbelangrijk
 
Francoi gckx

Francoi gckx

30/01/2014 14:42:10
Quote Anchor link
PS. Ik heb union all en dan SELECT FOUND_ROWS() ook geprobeerd of ik krijg als foutmelding

Cardinality violation: 1222 The used SELECT statements have a different number of columns
of INCORRECT use ORDER BY en UNION

Het komt neer op
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$query->execute();
                    $total = $this->db->query("SELECT FOUND_ROWS()");
                    $rowTotal = $total->fetch();
                    $total_results = $rowTotal['FOUND_ROWS()']; // Is het ook mogelijk deze waarde achter de array te stoppen/pushen (next line)?
                    return $query->fetchAll();


Ik zou dus een array moet maken als volgt: array([1]=>'$query->fetchAll()', [2] => $total->fetch());



Toevoeging op 30/01/2014 14:48:24:

maar dan wel met de waardes natuurlijk in de voorbeeld bedoel ik het als placeholders

Toevoeging op 30/01/2014 14:49:57:

@Frank als het echt niet zo lukt doe ik dat (met COUNT en LIMIT) maar ik gebruik nu codes van mij oude project die zonder classes werkte
Gewijzigd op 30/01/2014 14:43:22 door Francoi gckx
 
Erwin H

Erwin H

30/01/2014 15:04:13
Quote Anchor link
@Frank, volgens mij haal je het een en ander door elkaar. Die fetchAll staat los van het feit of je wel of niet een LIMIT gebruikt en of je wel of niet zelf telt of Mysql laat tellen. FetchAll haalt simpelweg all resultaten op die Mysql uit de database heeft getrokken en is een vervanging van de veel gebruikte while loop. Niet van een LIMIT clause.

@Francoi, zo'n array zou ik inderdaad maken, hoewel er natuurlijk ook wel andere manieren zijn.
 
Francoi gckx

Francoi gckx

30/01/2014 15:07:49
Quote Anchor link
Ok maar is het ook mogelijk (nader toelichting: $query->fetchAll() geeft natuurlijk al een array) om
$total->fetch() (dat is [FOUND_ROWS()] => 12) om in de $query->fetchAll() array te zetten/plaatsen/pushen?

Toevoeging op 30/01/2014 15:09:35:

Dan hoef ik de output niet aan te passen als ik weer een groter array maak moet ik alle output als een multid-array behandelen

Toevoeging op 30/01/2014 15:23:21:

Er is nu waarschijnlijk mee te werken
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
$total = $this->db->query("SELECT FOUND_ROWS()");
                    $rowTotal = $total->fetch();
                    $total_results = $rowTotal['FOUND_ROWS()'];
                    $arrayed = $query->fetchAll();
                    $arrayed['total_results'] = $total_results;
                    
                    return $arrayed;


Bedankt!
 
Frank Nietbelangrijk

Frank Nietbelangrijk

31/01/2014 03:41:25
Quote Anchor link
Erwin dat klopt inderdaad ik liet mij even misleiden door de naam :)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.