[TYPO3-german] sql-query führt im Frontend zu anderem Ergebnis als über phpMyAdmin

bernd wilke t3ng at pi-phi.tk
Fri Oct 22 00:49:36 CEST 2010


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


More information about the TYPO3-german mailing list