• Inhalt als PDF-Datei herunterladen
  • Optimierter Druck
Thema ohne neue Antworten

TYPO3-Browser: SQL-Felder numerisch sortieren


Autor Nachricht
Verfasst am: 17. 02. 2011 [05:18]
fabian
Fabian
Themenersteller
Dabei seit: 21.12.2010
Beiträge: 57
Fehler oder Fehlbedienung?

Bisher habe ich via
TYPOSCRIPT
plugin.tx_browser_pi1.views.list.1.orderBy = TABELLE.uid DESC

sortiert (php), nur werden Zahlen (Spalte uid) nicht korrekt sortiert.

Aus diesem Grund wollte ich SQL die Arbeit mit folgendem TS erledigen lassen.
TYPOSCRIPT
plugin.tx_browser_pi1.views.list.1.override.orderBy = TABELLE.uid DESC


Allerdings wird dann folgendes im Log angezeigt:
browser [WARN/SQL] ABORTED class.tx_browser_pi1_sql_functions.php, Zeile 2102
browser [ERROR/SQL] $csv_after_process is FALSE or is empty. class.tx_browser_pi1_sql_functions.php, Zeile 2101
browser [INFO/SQL] views.list.1 hasn't any array aliases.tables. We don't process aliases. class.tx_browser_pi1_sql_functions.php, Zeile 1057
browser [INFO/SQL] ORDER BY TABELLE.title DESC class.tx_browser_pi1_sql_functions.php, Zeile 2047
browser [INFO/SQL] The system generated ORDER BY clause will be ignored! class.tx_browser_pi1_sql_functions.php, Zeile 2046
browser [INFO/SQL] views.list.1.override.orderBy is: TABELLE.title DESC class.tx_browser_pi1_sql_functions.php, Zeile 2045
Verfasst am: 18. 02. 2011 [18:20]
dirk
Dirk Wildt
Dabei seit: 27.09.2010
Beiträge: 601
"fabian" schrieb:

... nur werden Zahlen (Spalte uid) nicht korrekt sortiert.


Was meinst Du damit?

Der Browser versucht bei einer Tabellen-Spalte herauszufinden, ob es sich bei den Daten um numerisch oder alpahbetisch Werte handelt und ordnet diese dann entsprechend.

Bei dem Feld uid müsste die Sortierung beispielsweise sein:
1, 2, 103, 23456 (numerisch) - und nicht etwa alphabetisch: 1, 103, 2, 23456.

Was läuft bei Dir falsch?

Viele Grüße
Dirk

--
Willst Du den TYPO3-Browser mit einer Spende unterstützen? Wir freuen uns über jeden EUR!

Sponsoring: Ich will einfach einen Betrag spenden
http://typo3-browser.de/sponsoring
Verfasst am: 19. 02. 2011 [05:45]
fabian
Fabian
Themenersteller
Dabei seit: 21.12.2010
Beiträge: 57
Hallo Dirk,

besten Dank für Deinen Hinweis (Der Browser versucht bei einer Tabellen-Spalte herauszufinden, ob es sich bei den Daten um numerisch oder alpahbetisch Werte handelt und ordnet diese dann entsprechend.), ich habe entsprechend im Code gesucht und bin auch fündig geworden.

Datei: class.tx_browser_pi1_sql_functions.php
Zeile: im Bereich 1700

Bisher:
PHP
$str_eval      = $GLOBALS['TYPO3_DB']->sql_field_type($res, $field);


Korrektur:
PHP
$str_eval      = $GLOBALS['TYPO3_DB']->sql_field_type($res, 0);


Nach der obigen Änderung funktioniert die Sortierung bei mir nun korrekt. Ich bitte um Kontrolle und anschließend ggf. um Übernahme in die nächste Veröffentlichung.

BTW 1:
Folgende Zeile ist imho überflüssig und kann gelöscht werden.
PHP
$query         = $GLOBALS['TYPO3_DB']->SELECTquery($select_fields,$from_table,$where_clause,$groupBy='',$orderBy='',$limit='0');


BTW 2:
Folgende Zeile funktioniert zwar, aber müsste imho korrekterweise wie folgt angepasst werden.

Bisher:
PHP
$res           = $GLOBALS['TYPO3_DB']->exec_SELECTquery($select_fields,$from_table,$where_clause,$groupBy='',$orderBy='',$limit='0');


Korrekturvorschlag:
PHP
$res           = $GLOBALS['TYPO3_DB']->exec_SELECTquery($select_fields,$from_table,$where_clause,'','','0');


Danke im Voraus!


Fabian

[Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 19.02.2011 um 05:46.]
Verfasst am: 19. 02. 2011 [05:53]
fabian
Fabian
Themenersteller
Dabei seit: 21.12.2010
Beiträge: 57
Ironische Anmerkung am frühen Morgen:
Der Beitrag könnte nun wieder zurück in das Forum "TYPO3 Browser Bugs"... icon_wink.gif
Verfasst am: 19. 02. 2011 [14:03]
dirk
Dirk Wildt
Dabei seit: 27.09.2010
Beiträge: 601
Hallo Fabian,
herzlichen Dank für Deinen Abstieg in die Tiefen des Browser PHP-Codes und die genaue Beschreibung Deiner Lösung.

"fabian" schrieb:

Bisher:
PHP
$str_eval      = $GLOBALS['TYPO3_DB']->sql_field_type($res, $field);

Korrektur:
PHP
$str_eval      = $GLOBALS['TYPO3_DB']->sql_field_type($res, 0);

Nach der obigen Änderung funktioniert die Sortierung bei mir nun korrekt.


In Deinem Fall mag es funktionieren. Nur ist es keine Lösung: Du hast faktisch abgeschaltet, dass MySQL den Feldtyp spezifiziert.

Kannst Du mir mal beschreiben, was denn bei Dir wie falsch sortiert wird.
Ohne Fehlerbeschreibung weiß ich nicht, was ich prüfen soll, da in dem von Dir beschriebenen Zusammenhang bei mir bislang kein Fehler bei der Sortierung aufgetreten ist.

Viele Grüße
Dirk

--
Willst Du den TYPO3-Browser mit einer Spende unterstützen? Wir freuen uns über jeden EUR!

Sponsoring: Ich will einfach einen Betrag spenden
http://typo3-browser.de/sponsoring
Verfasst am: 19. 02. 2011 [14:09]
dirk
Dirk Wildt
Dabei seit: 27.09.2010
Beiträge: 601
"fabian" schrieb:

BTW 2:
Folgende Zeile funktioniert zwar, aber müsste imho korrekterweise wie folgt angepasst werden.

PHP
// Bisher
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($select_fields,$from_table,$where_clause,$groupBy='',$orderBy='',$limit='0');
  // Korrekturvorschlag
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($select_fields,$from_table,$where_clause,'','','0');



Danke für Deinen Korrekturvorschlag und das genaue Analysieren des Browser-PHP-Codes.

Wie Paramater an eine Funktion übergeben werden, scheint mir doch eher Geschmackssache und keine Frage von Korektheit zu sein.

Beim ersten PHP-Code-Beispiel weiß ich sofort, welche Parameter übergeben werden, beim zweiten weiß ich es nicht. Der Code wird also schwerer lesbar.

Daher möchte ich Deinen Vorschlag nicht annehmen.

Ich hoffe, das ist ok.

Viele Grüße
Dirk

--
Willst Du den TYPO3-Browser mit einer Spende unterstützen? Wir freuen uns über jeden EUR!

Sponsoring: Ich will einfach einen Betrag spenden
http://typo3-browser.de/sponsoring
Verfasst am: 19. 02. 2011 [17:55]
fabian
Fabian
Themenersteller
Dabei seit: 21.12.2010
Beiträge: 57
zu 1)
PHP
$str_eval      = $GLOBALS['TYPO3_DB']->sql_field_type($res, 0);

Obige Zeile müsste imho definitiv korrekt sein, da man nach meinen Tests nicht über den Namen auf die Feld-Eigenschaften zugreifen kann, sondern nur über die ID, in diesem Fall 0. Zumindest konnte ich bei dem Einbau von var_dump($str_eval) immer die korrekten Feld-Eigenschaften sehen und in der Folge wird dann auch korrekt sortiert.

zu 2)
PHP
$res           = $GLOBALS['TYPO3_DB']->exec_SELECTquery($select_fields,$from_table,$where_clause,$groupBy='',$orderBy='',$limit='0');


Meinem Verständnis nach würde es nach dem Ersetzen der Variablen dann in der betreffenden Funktion wie folgt aussehen:
PHP
$res           = $GLOBALS['TYPO3_DB']->exec_SELECTquery('FELD','TABELLE','',='',='',='0');

Daher mein "Korrekturvorschlag" wegen der
PHP
=''
, sehe ich das falsch bzw. sind in diesem Punkt meine php-Kenntnisse noch nicht ausreichend?
Verfasst am: 20. 02. 2011 [01:09]
dirk
Dirk Wildt
Dabei seit: 27.09.2010
Beiträge: 601
"fabian" schrieb:

PHP
$str_eval      = $GLOBALS['TYPO3_DB']->sql_field_type($res, 0);

Obige Zeile müsste imho definitiv korrekt sein, da man nach meinen Tests nicht über den Namen auf die Feld-Eigenschaften zugreifen kann, sondern nur über die ID, in diesem Fall 0. Zumindest konnte ich bei dem Einbau von var_dump($str_eval) immer die korrekten Feld-Eigenschaften sehen und in der Folge wird dann auch korrekt sortiert.


Danke. Du hast recht.

Ich habe den Bug im forge gepostet. Siehe
Bug #13186: $GLOBALS['TYPO3_DB']->sql_field_type get a wrong parameter

Viele Grüße
Dirk

--
Willst Du den TYPO3-Browser mit einer Spende unterstützen? Wir freuen uns über jeden EUR!

Sponsoring: Ich will einfach einen Betrag spenden
http://typo3-browser.de/sponsoring
Verfasst am: 20. 02. 2011 [01:16]
dirk
Dirk Wildt
Dabei seit: 27.09.2010
Beiträge: 601
"fabian" schrieb:

PHP
// Meinem Verständnis nach würde es nach dem Ersetzen der Variablen dann in der betreffenden Funktion wie folgt aussehen:
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('FELD','TABELLE','',='',='',='0');



Nee, Du kannst einem Parameter einen Wert zuweisen. Folgende Zeilen bewirken das gleiche

PHP
// Beispiel 1
$groupBy = '';
$orderBy = '';
$limit   = '0';
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($select_fields,$from_table,$where_clause,$groupBy,$orderBy,$limit);
 
  // Beispiel 2
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery($select_fields,$from_table,$where_clause,$groupBy='',$orderBy='',$limit='0');


Viele Grüße
Dirk

--
Willst Du den TYPO3-Browser mit einer Spende unterstützen? Wir freuen uns über jeden EUR!

Sponsoring: Ich will einfach einen Betrag spenden
http://typo3-browser.de/sponsoring
Verfasst am: 21. 02. 2011 [08:12]
fabian
Fabian
Themenersteller
Dabei seit: 21.12.2010
Beiträge: 57
zu 1)
Besten Dank für die Bestätigung des Bugs.

zu 2)
Da habe ich wieder etwas dazu gelernt. Vielen lieben Dank für die Erläuterungen.



Powered by TYPO3 und mm_forum Extension

  • Inhalt als PDF-Datei herunterladen
  • Optimierter Druck