php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 22.11.2009, 20:01  
Benutzer
 
Registriert seit: 13.05.2008
Beiträge: 96
Timer befindet sich auf einem aufstrebenden Ast
Standard Varchar als Integer sortieren?

Hallo Leute!

Ich habe ein kleines Problem. In einer MySQL-Tabelle habe ich ein Feld vom Typ Varchar, das ausschließlich nummerische Werte enthält (Preise). Nun wollte ich das ganze sortiert nach Preis auslesen lassen:

ORDER BY 'preise' ASC

habe nun aber festgestellt, dass wenn ich z.B. die folgenden Preise habe:

12.95
8.48
19.99

die "8.48" an dritter Position kommt, da SQL logischer Weise die 8 höher bewertet als die 1 am Anfang der anderen Preise.
Ich möchte nun nach Möglichkeit nicht das Tabellenfeld in ein INTEGER Feld umwandeln sonder wissen, ob es ein Möglichkeit gibt auch die Varchar-Felder als Integer auszulesen,
also eine Art ORDER BY 'preise' AS integer ASC

Wäre für Tipps echt dankbar.
__________________
Timer ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 22.11.2009, 20:06  
Erfahrener Benutzer
 
Registriert seit: 07.06.2008
Beiträge: 992
PHP-Kenntnisse:
Fortgeschritten
Frank befindet sich auf einem aufstrebenden Ast
Frank eine Nachricht über ICQ schicken Frank eine Nachricht über MSN schicken Frank eine Nachricht über Yahoo! schicken
Standard

Nein das wird nicht funktionieren.
Wandle das Feld in Typ Float um.
Warum ist es überhaupt ein VARCHAR? Das wiederspricht jeder Logik.
__________________
Frank ist offline   Mit Zitat antworten
Alt 22.11.2009, 20:06  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.266
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Hallo,

'preise' ist falsch, da damit ein String definiert wird. Du möchtest sicherlich einen Int-Cast. Wie das geht, kannst du im Handbuch von MySQL online nachschlagen, habe den Befehl nicht im Kopf. Für Preise solltest du aber eigentlich auch DECIMAL verwenden.
Chriz ist offline   Mit Zitat antworten
Alt 22.11.2009, 20:21  
Benutzer
 
Registriert seit: 13.05.2008
Beiträge: 96
Timer befindet sich auf einem aufstrebenden Ast
Standard

Das Feld ist daher vom Typ varchar, da so auch gleich die Nachkomma-Stelle "0" mit der Datenbank hinterlegt ist.
Wenn ich z.B. 18.90 habe, möchte ich nicht 18.9 haben. Es wäre einfach zu umständlich im Nachhinein jedes PHP-Skript, das Preisdaten ausgibt, mit number_format($preis,2) auszustatten.
__________________
Timer ist offline   Mit Zitat antworten
Alt 22.11.2009, 20:34  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.266
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Dafür kannst du mit den Preisen jetzt nichts mehr anstellen, weder damit rechnen, noch sie sortieren. Ich würde sagen dieser Nachteil ist erheblicher als deine Faulheit eine Funktion auf einen Wert loszulassen. Ich nehm auch mal an, htmlentities() und mysql_real_escape_string() sind dir dann auch zu umständlich? Mach es richtig oder garnicht. Gerade bei einem Shop solltest du sauber programmieren.

Mit DECIMAL hast du übrigens bei MySQL dieses Problem sowieso nicht.
Chriz ist offline   Mit Zitat antworten
Alt 22.11.2009, 20:47  
Benutzer
 
Registriert seit: 13.05.2008
Beiträge: 96
Timer befindet sich auf einem aufstrebenden Ast
Standard

LÖSUNG:

ORDER BY cast(preise AS UNSIGNED)


Danke!

EDIT: Rechnen geht definitiv! Und sortieren halt über obige ORDER BY CAST Verwendung.
__________________
Timer ist offline   Mit Zitat antworten
Alt 22.11.2009, 22:46  
Erfahrener Benutzer
 
Registriert seit: 07.06.2008
Beiträge: 992
PHP-Kenntnisse:
Fortgeschritten
Frank befindet sich auf einem aufstrebenden Ast
Frank eine Nachricht über ICQ schicken Frank eine Nachricht über MSN schicken Frank eine Nachricht über Yahoo! schicken
Standard

Na dann bleibt nur noch zu sagen: Der Benutzer dieses Shops tut mir leid...
__________________
Frank ist offline   Mit Zitat antworten
Alt 22.11.2009, 23:12  
Benutzer
 
Registriert seit: 13.05.2008
Beiträge: 96
Timer befindet sich auf einem aufstrebenden Ast
Standard

Es ist kein Shop!

Sorry, dass nicht alle so 100% perfektionistisch sind, wie "Ihr".
Was spricht gegen meine Lösung? Alles funktioniert!
__________________
Timer ist offline   Mit Zitat antworten
Alt 23.11.2009, 01:39  
Erfahrener Benutzer
 
Registriert seit: 07.06.2008
Beiträge: 992
PHP-Kenntnisse:
Fortgeschritten
Frank befindet sich auf einem aufstrebenden Ast
Frank eine Nachricht über ICQ schicken Frank eine Nachricht über MSN schicken Frank eine Nachricht über Yahoo! schicken
Standard

Was gegen deine Lösung spricht, hast du bereits mit deiner Frage im ersten Post selbst beantwortet.
Weitere Nachteile wurden im Threadverlauf auch genann, auch wenn du sie nicht wissen willst.

Das hat nichts mit Perfektionismus zu tun, sondern mit Datenbankoptimierung und Programmlogik. Nicht um sonst gibt es verschiede Datentypen.

Benutze doch gleich BLOB-Felder für alle deine Daten.
__________________
Frank ist offline   Mit Zitat antworten
Alt 23.11.2009, 08:49  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.233
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Und was ebenfalls dagegen spricht: Das ist ein Performance-Killer...
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Termin-Array sortieren (mehrdimensionaler Array) mumaha PHP Tipps 2009 1 13.11.2009 08:14
[gelöst] Zahlen sortieren mit Varchar moose Datenbanken 8 21.07.2008 13:53
Nach Datum sortieren zoro Datenbanken 9 28.11.2007 14:00
Type Hinting - must be an instance of integer, integer given mAy^daY PHP Tipps 2007 1 06.03.2007 14:55
DECIMAL lässt sich nicht mit ORDER BY sortieren buggybugga Datenbanken 4 07.07.2006 15:43
MYSQL Datentyp SET versus VARCHAR mit Komma getrennt uprocka Datenbanken 8 17.02.2006 13:59
Multiarray speziel sortieren... PHP Tipps 2007 11 09.12.2005 13:51
array sortieren lord nacon PHP Tipps 2005-2 2 14.08.2005 08:00
[Erledigt] MySQL - Tabelle - Typ wichtig? (VARCHAR, TEXT) Datenbanken 9 15.07.2005 00:09
mehrere integer werte in eine spalte GrU3nL!nG Datenbanken 4 13.07.2005 17:05
Problem beim Sortieren PHP Tipps 2005-2 5 29.06.2005 07:00
Termine sortieren Tschuu PHP Tipps 2005 12 18.05.2005 21:15
Tabelle wird nicht erzeugt. Warum? PHP-Fortgeschrittene 3 21.09.2004 19:05
[Erledigt] Array sortieren PHP-Fortgeschrittene 4 18.07.2004 14:53
assoc-array sortieren lassen PHP Tipps 2004 10 26.06.2004 16:06

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sql varchar to int, mysql varchar numerisch sortieren, http://www.php.de/datenbanken/61510-varchar-als-integer-sortieren.html, php varchar to int, varchar int, sql varchar numerisch sortieren, sql varchar in int, sql varchar sortieren, mysql convert varchar to int, mysql varchar to int, varchar numerisch sortieren, varchar in integer umwandeln, varchar to int sql, int varchar, varchar in integer, mysql varchar rechnen, sql varchar rechnen, varchar als integer, int to varchar, varchar rechnen

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:16 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum