Numerisch aufsteigende Sortierung db_select mit Webforms
am 17.02.2014 - 13:01 Uhr in
Hallo zusammen,
habe gerade eine Nuss zu knacken. Und zwar möchte ich Daten, die per Webform eingetragen wurden, nicht nur sortiert ausgeben, sondern direkt sortiert abfragen, also z.B. von x tausend Submissions die 20 mit dem niedrigsten Wert.
Das sieht bislang in etwa so aus:
<?php
$top20 = db_select('webform_submitted_data','t')
->fields('t', array('data','sid'))
->condition('nid',11)
->condition('cid',13)
->orderBy('data', 'ASC')
->range(0,20)
->execute();
?>
Das funktioniert soweit bis auf die unschöne Eigenheit, dass das "data"-Feld als String angesehen wird. Das ist ja soweit auch korrekt, weil ja in diesem Feld Strings stehen, wobei die Webform-Komponente mit der cid 13 ausschließlich ganzzahlige Werte in diesem Feld hat. Nur ist die Folge, dass eben "alphabetisch" sortiert wird und daher z.B. 1245 vor 456 steht -> das soll natürlich nicht so sein.
Nun gibt es für normale MySQL-Abfragen so einiges an Hacks und Typecasts, um den String vorher in eine Zahl umzuwandeln. Nur habe ich da bislang nichts gefunden, was auch auf der schönen Datenbank-Abstraktionsschicht von Drupal laufen würde.
Jemand von euch eine Idee?
EDIT: Bevor jemand mit Views kommt: Die Webform-Integration davon ist grauslig und buggy ohne Ende, das kommt an dieser Stelle nicht in Frage und würde das Problem auch nicht lösen.
Viele Grüße
Sonja
- Anmelden oder Registrieren um Kommentare zu schreiben
Hast Du es mit CAST(`data` AS
am 21.02.2014 - 07:52 Uhr
Hast Du es mit CAST(`data` AS INT) probiert?
Also so wie hier beschrieben:
http://stackoverflow.com/questions/14709058/mysql-order-by-str-to-int
Ich habe es allerdings auch nicht mit der Datenbank-Abstraktionsschicht von Drupal getestet.
Viele Grüße,
Regina
LG Regina Oswald
-------------------------
Montviso - Internetdienstleistungen
http://www.montviso.de