Mo. 17.03.2014
20:26 Uhr
#1
- Registriert seit
- 23.04.2006
- Beiträge
- 422
- Beitragswertungen

Hey Leute,
wusste nun nicht um Kritik und Verbesserung oder Problem.
also ich wollte gerade über die methode "where" von der Datenbank was filtern.
Ist das richtig das ich da nicht den operator auswählen kann, bin immer gebunden an "=" ?
Wer es denn nicht Sinvoll, sofern es noch nicht geht?
Zuletzt modifiziert von Balthazar3k am 17.03.2014 - 20:27:08
Kein Support für den Raidplaner über PM.
Mo. 17.03.2014
21:48 Uhr
#2
- Registriert seit
- 16.06.2011
- Beiträge
- 1.096
- Beitragswertungen

Ja das stimmt aber ich glaube Pion wollte das noch aubauen.
Mo. 17.03.2014
22:13 Uhr
#3
- Registriert seit
- 25.07.2007
- Beiträge
- 870
- Beitragswertungen

Aktuell bist du daran gebunden.
Mal überlegen wie "granular" wir das noch aufbauen wollen. Wenn du nämlich so viele Einstellungen/Setter hast, ist das auch nicht mehr übersichtlich und du sparst dir nichts mehr gegenüber einem Query.
Aktuell bitte einfach die Query Funktionen verwenden, wenn die aktuellen Select an ihre Limit kommen.
Di. 18.03.2014
09:02 Uhr
#4
- Registriert seit
- 23.04.2006
- Beiträge
- 422
- Beitragswertungen

Alles klar

Danke für die Info.
Gibt es bereits eine Blätter funktion/methode/class?
Zuletzt modifiziert von Balthazar3k am 18.03.2014 - 09:08:26
Kein Support für den Raidplaner über PM.
Di. 18.03.2014
11:50 Uhr
#6
- Registriert seit
- 23.04.2006
- Beiträge
- 422
- Beitragswertungen

Würde ich gerne machen, glaube aber das es meine Object Orientierten kenntnisse übersteigt. Ich werde mir das mal überlegen, wie ich sowas zusammen setzen könnte. Dann evt. mal ein ansatz wagen.
Sollte das als Freistehendes Modul sein oder in das System mit Intigriert?
Zuletzt modifiziert von Balthazar3k am 18.03.2014 - 11:58:04
Kein Support für den Raidplaner über PM.
Di. 18.03.2014
22:55 Uhr
#8
- Registriert seit
- 23.04.2006
- Beiträge
- 422
- Beitragswertungen

ja ist nicht so einfach.
Ich habe nicht soviel zeit zu Testen
Wo würdet ihr die klasse plazieren
ich würde sie entweder versuchen über die MySQL einbauen ($this->db()->pagerQuery()) oder im controller die classe dann übergeben ($this->pager()->getLimit();) wenn meine varianten überhaupt bis zum ende durchführbar sind
Zuletzt modifiziert von Balthazar3k am 18.03.2014 - 22:58:33
Kein Support für den Raidplaner über PM.
Mi. 19.03.2014
08:13 Uhr
#9
- Registriert seit
- 25.07.2007
- Beiträge
- 870
- Beitragswertungen

Hänge sie mal an das db Objekt $this-db ()-getPager()
Zuletzt modifiziert von Pion am 19.03.2014 - 08:15:06
Mi. 19.03.2014
21:47 Uhr
#10
- Registriert seit
- 23.04.2006
- Beiträge
- 422
- Beitragswertungen

Muss Passen, denke der ansatz passt nicht wirklich mit in das system. Vorallem denke ich nicht das er effektiv sein wird, wenn ich die SQL mit RegExp manipuliere um die daten die ich/man brauch, um damit die Seiten zu berechnen. So wie ich mir das dachte,
github.com/Balthazar3k/Ilch-2.0/commit/e2f41e635906ad786a22654e6f6c3229a1ffa641
Ich sollte mehr mit Objekten Arbeiten, daran harbert es noch ganz schön.
der Paginator von Zend ist ja auch eine extreme nummer.
Kein Support für den Raidplaner über PM.
Do. 20.03.2014
09:15 Uhr
#11
- Registriert seit
- 23.04.2006
- Beiträge
- 422
- Beitragswertungen

oder vieleich so
1 2 3 | $pager = $this->db()->getPager('ep_events')->field('id')->viewEntries(20);
$pager->getLimit(); #(return LIMIT 1,20)
$pager->getNavigation(); #(return Links)
|
github.com/Balthazar3k/Ilch-2.0/commit/a58c02a07948fa05651b2ddebb904b5df04d659d
Zuletzt modifiziert von Balthazar3k am 20.03.2014 - 09:43:21
Kein Support für den Raidplaner über PM.
Do. 20.03.2014
09:49 Uhr
#12
- Registriert seit
- 16.06.2006
- Beiträge
- 15.334
- Beitragswertungen

Wenn ich etwas dazu sagen darf, es wäre schon sinnvoll es wie bei Zend zu halten, dass die Pagination erstmal gar keine Abhängigkeit zur Datenbank hat.
Im Grunde muss dem Paginator ja nur einige Werte übergeben werden: Anzahl Einträge insgesamt, Einträge pro Seite, aktuelle Seite, und wie der Link aussehen soll und ggf. ein(e) Template/View für das Rendering, wobei da wohl am besten eine Standardview bereitstehen sollte.
Aus Datenbanksicht, muss du dann nur noch auslesen, wie viele Einträge es insgesamt gibt.
Do. 20.03.2014
12:35 Uhr
#13
- Registriert seit
- 23.04.2006
- Beiträge
- 422
- Beitragswertungen

Ja gut mehr mache ich jetzt nicht, finde meine Variante etwas zu umständlich.
so funktioniert es zwar, gibt aber noch keine link ausgabe und ich muss das $request Object dem Mapper rüberwerfen.
was anderes fällt mir noch nicht ein.
der von Zend ist noch zu hoch für mich, mit verschiedene adapter
1 2 3 4 5 6 7 8 9 10 11 12 | public function getEventList(\Ilch\Request $request, $where = array())
{
$pager = $this->db()->getPager('ep_events')->field('id')->viewEntries(6);
$limit = $pager->getLimit($request->getParam('page'));
$entryArray = $this->db()->selectArray('*')
->from('ep_events')
->where($where)
->order(array('start' => 'ASC'))
->limit($limit)
->execute();
|
eine idee habe ich noch
wenn einfach das result von der db da reinwerfen, das er das array zählen kann und den rest erstellt er alleine. Aber keine ahnung ob es effektiv ist.
Zuletzt modifiziert von Balthazar3k am 20.03.2014 - 12:37:59
Kein Support für den Raidplaner über PM.
Do. 20.03.2014
13:21 Uhr
#15
- Registriert seit
- 23.04.2006
- Beiträge
- 422
- Beitragswertungen

Würde mich aber reizen, wo zählt man direkt über MySQL COUNT(), PHP count() oder mysql_num_rows, andere wege sind mir nicht bekannt.
Macht doch auch sinn nur die Daten aus der Datenbank zu holen die man für eine Seite tatsächlich brauch, dazu fällt mir auser MySQL COUNT() nichts anderes ein. Ist zwar eine zweite abfrage aber die ist klein geahlten.
hier von vlt.
1 | mysqli_result Object ( [current_field] => 0 [field_count] => 11 [lengths] => [num_rows] => 10 [type] => 0 )
|
Zuletzt modifiziert von Balthazar3k am 20.03.2014 - 13:27:31
Kein Support für den Raidplaner über PM.
Do. 20.03.2014
13:57 Uhr
#16
- Registriert seit
- 25.07.2007
- Beiträge
- 870
- Beitragswertungen

Okay ja ich überleg mir demnächst da ein System. Umständlich wie bei Zend muss es für Ilch natürlich nicht werden. Der Pager den wir brauchen wird auch nur für die DB verwendet werden.
Aber letztlich muss der, der den Pager verwenden will eine Instanz von ihm machen. Dann die Werte übergeben und den Pager an die View weiterreichen die dann zb via "<?=$this->get('pager')->getHtml()?>" den Pager "rendern" kann.
Wieweit der Pager auch Abfragen manipulieren kann steht noch offen. Lieber weniger als zu viel magic. Sprich die Mapper könnten ja auch auf den Pager zugreifen mittels $this->getPager()->getLimits()
OFF TOPIC
Ansonsten am schönsten kannst du das Schlüsselwort "SQL_CALC_FOUND_ROWS" an deine SELECT hängen, dann kannst du mit "SELECT FOUND_ROWS();" die Anzahl bekommen.
Do. 20.03.2014
21:03 Uhr
#18
- Registriert seit
- 16.06.2011
- Beiträge
- 1.096
- Beitragswertungen

Super ich sau es mir auch mal die Tage an.
Do. 20.03.2014
22:03 Uhr
#19
- Registriert seit
- 23.04.2006
- Beiträge
- 422
- Beitragswertungen

Klasse, gleich eingebaut
Kein Support für den Raidplaner über PM.
Fr. 21.03.2014
16:10 Uhr
#20
- Registriert seit
- 23.04.2006
- Beiträge
- 422
- Beitragswertungen

Ist das auch möglich über $this->db()->queryArray();?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $entryArray = $this->db()->queryArray('
SELECT
*
FROM [prefix]_ep_events
ORDER BY status ASC, start DESC
LIMIT '.$pagination->getLimit()[0].','.$pagination->getLimit()[1].';
');
if ($pagination !== null) {
$pagination->setRows($entryArray);
}
|
das Problem da bei ist ja das "$entryArray" kein Object mehr ist, somit kann der ja auch nicht mehr Zählen. Später komme ich nähmlich nicht mehr drum herum die Operatoren in der Where clausel zu ändern.
Irgend eine Simple Idee das um zu Setzen?
Kein Support für den Raidplaner über PM.
Fr. 21.03.2014
16:57 Uhr
#22
- Registriert seit
- 23.04.2006
- Beiträge
- 422
- Beitragswertungen

Danke Funktioniert
Nun habe ich auch mal ein Praktisches beispiel für "SQL_CALC_FOUND_ROWS"
$pagination->getLimit()[0] funktioniert auf jedenfall auf meiner Test umgebung (5.5.9). Habe das vorher auch noch nie in php benuzt nur in js. Ich baue es sicherheisthalber anders. kann nicht einfach PHP Version ändern
Kein Support für den Raidplaner über PM.
Fr. 21.03.2014
17:04 Uhr
#24
- Registriert seit
- 25.07.2007
- Beiträge
- 870
- Beitragswertungen

Super allerdings hättest du das Statement auch auf selectArray umbauen können.
Fr. 21.03.2014
18:26 Uhr
#25
- Registriert seit
- 16.06.2006
- Beiträge
- 15.334
- Beitragswertungen

Allerdings sollte man das nicht (wirklich) verwenden, wenn man auf mehrere Keys des Rückgabewertes zurückgreifen will, da die Funktion dann mehrfach ausgeführt wird, was unnötig ist.
Fr. 21.03.2014
18:38 Uhr
#26
- Registriert seit
- 25.07.2007
- Beiträge
- 870
- Beitragswertungen

Jup sollte man schon drauf achten was die Funktion so macht :-)
Ich mach hier jetzt mal zu, sonst wird das wieder ein Tread wo alle möglichen Themen reinkommen, ich denke das obige "Problem" ist gelöst.