Am Thu, 21 Oct 2010 23:28:31 +0200 schrieb Alisha: > Hallo, > ich habe in meiner FE-Extension eine Query eingebaut, die soweit auch > funktioniert. Nur ist die Ergebnisliste im Frontend oft eine andere als > als wenn ich die Abfrage direkt in phpMyAdmin ausführe. Im Frontend > werden oft weniger Datensätze angezeigt. > > Es geht um Adressdaten, die alle gleich aufgebaut sind. Jedem > Adressdatensatz können verschiedene "Kategorien" zugeordnet sein, die in > einer 1:n - Tabelle liegen ("fe_users_user_xxx"). Die Bearbeitung der > Datensätze von fe_users mit diesen Kategorien funktioniert im Backend > auch einwandfrei. Alle werden korrekt angezeigt. > > Die Query, die generiert werden soll: (Beispiel) SELECT DISTINCT b.uid, > b.company, b.name, b.address, b.telephone, b.email, b.zip, b.city, b.www > FROM fe_users_user_xxx a INNER JOIN fe_users b ON b.uid = a.uid_local > WHERE b.deleted = 0 AND b.usergroup = 1 AND b.pid = '47' AND (1 = 1 OR > a.uid_foreign = 1 OR a.uid_foreign = 2 OR a.uid_foreign = 3 OR > a.uid_foreign = 4 OR a.uid_foreign = 5 OR a.uid_foreign = 6 OR > a.uid_foreign = 7 OR a.uid_foreign = 8 OR a.uid_foreign = 9 OR > a.uid_foreign = 10 OR a.uid_foreign = 11 OR a.uid_foreign = 12 OR > a.uid_foreign = 13 OR a.uid_foreign = 14 OR a.uid_foreign = 17) AND > b.static_info_country like 'DEU' AND b.zip like '60%' > > Diese Abfrage führt bei phyMyAdmin beispielsweise zu 4 Datensätzen, über > die Extension ausgeführt, werden mir im Frontend nur 3 Datensätze > ausgegeben. Das geschieht bei mehreren Stichproben und die Inhalte der > Datensätze geben keinen Hinweis darauf, warum manche nicht gefunden > werden könnten, sie sind alle gleich aufgebaut und haben auch > entsprechend zugeordnete Datensätze in der zweiten Tabelle. > > ich baue dieses Statement in meiner Klasse so auf: > > Der Where-String wird aus den Angaben eines Formulars zusammengestellt. > In diesem Formular werden per checkbox die gewünschten Werte ausgewählt. > Zudem wird ein Länderkürzel übergeben und die ersten beiden Ziffern der > PLZ. > (Code gekürzt...) > $whereString = "AND (1 = 1 "; > foreach ($this->piVars['auswahl'] as $a => $b){ > $whereString.=" OR a.uid_foreign = ".$a; $whereString.= ")"; > $whereString.= " AND b.static_info_country like > '".$this->piVars['land']."' AND b.zip like '".$this->piVars['plz']."%'"; > > > > $res = $GLOBALS["TYPO3_DB"]->exec_SELECTquery( "DISTINCT b.uid, > b.company, > b.name, > b.address, > b.telephone, > b.email, > b.zip, > b.city, > b.www", > "fe_users_user_xxx a INNER JOIN fe_users b ". "ON b.uid = a.uid_local " > , > "b.deleted = 0 > AND b.usergroup = 1 > AND b.pid = '".$feUserPid."' > ".$whereString, "b.zip"); >
schau doch mal auf: http://www.pi-phi.de/database-api.html insbesondere: $GLOBALS['TYPO3_DB']->store_lastBuiltQuery = 1; und später im debug(): 'query' => $GLOBALS['TYPO3_DB']->debug_lastBuiltQuery damit kannst du prüfen was wirklich abgefragt wird und mit deinem händischen sql vergleichen. ich vermute die Differenz in den enableFields oder in zusätzlichen Parametern (ungewollte groupBy- Gruppierungen) bernd -- http://www.pi-phi.de/cheatsheet.html _______________________________________________ TYPO3-german mailing list TYPO3-german@lists.typo3.org http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german