FOUND_ROWS() in dezelfde query SQL_CALC_FOUND_ROWS column
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
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.
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)
1
2
3
4
5
6
7
8
9
10
11
12
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;
?>
// 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
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)
1
2
3
4
5
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();
$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
@Francoi, zo'n array zou ik inderdaad maken, hoewel er natuurlijk ook wel andere manieren zijn.
$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)
1
2
3
4
5
6
7
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;
$rowTotal = $total->fetch();
$total_results = $rowTotal['FOUND_ROWS()'];
$arrayed = $query->fetchAll();
$arrayed['total_results'] = $total_results;
return $arrayed;
Bedankt!
Erwin dat klopt inderdaad ik liet mij even misleiden door de naam :)