Textfeld in Abfrage umwandeln zu Zahlenfeld

PHP, Ajax, CSS, HTML, Javascript
Eben für die wirklich Harten, die alles selber machen.
Antworten
Benutzeravatar
cbrkiter
Beiträge: 170
Registriert: Fr 26.Nov, 2004 01:30
Kontaktdaten:

Textfeld in Abfrage umwandeln zu Zahlenfeld

Beitrag von cbrkiter »

Servus. Ich habe mal ein Problem.

Ich habe folgende Abfrage innerhalb eines php-Scripts:

Code: Alles auswählen

$sql = "SELECT *
	FROM " . TABLE1 . "
	ORDER BY FeldX DESC";
Das Feld replacement wurde wie folgt in der DB bzw. Tabelle angelegt

Code: Alles auswählen

FeldX char(100) NOT NULL default ''
Jetzt stehen aber nur Zahlenwerte in dem Feld und wenn ich mir das Ergebnis zeilenweise ausgeben lasse, dann habe ich die Reihenfolge Zeile 1 = 9253 / Zeile 2 = 9 und Zeile 3 = 881 usw.

Kann ich bereits in der SQL-Abfrage das Feld FeldX in ein Zahlenfeld umwandeln, so dass auch die Sortierung später richtig ist?


PS: Ich hoffe, ich habe das richtige Forum erwischt. Falls nicht, dann verschiebt es bitte dorthin, wo es hingehört. ;)
1. 'Man muss das Unm?gliche versuchen, um das M?gliche zu erreichen!' (Hermann Hesse)
2. 'The best way to learn something is to get your hands dirty and do it!' (keine Ahnung))
3. http://www.thw-kamen-bergkamen.de
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Öhm, rechne doch einfach damit.
PHP erkennt dann schon, was Du willst.
Grund: Variablen werden ohne vorherige Definition nach dem Inhalt definiert.
Daher kann man mit aus einer Datenbank ausgelesenen "Texten" rechnen, sofern diese Zahlen sind.
Um sicher zu gehen, daß dem aber wirklich so ist, kannst Du mit

Code: Alles auswählen

$variable = intval($variable);
diese in eine definitive Zahl umwandeln.
Kann PHP dabei keine Zahl entdecken (also der Inhalt beginnend mit Ziffern), wird "FALSE" zurückgegeben, also "0". Andernfalls schneidet PHP alles nach der letzten erkannten Ziffer einfach ab.
So wird z. B. aus
"dies ist keine Zahl" = FALSE
"123 ist eine Zahl" = 123
"die Zahl 123 ist nicht lesbar" = FALSE
"123" = 123
123 = 123 (ein bisschen blöd dieses Beispiel, aber es würde z. B. 12,3 zu einer 12 umgewandelt, da PHP von Hause aus nur den Punkt als Dezimaltrenner kennt (englisches Format)!)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
cbrkiter
Beiträge: 170
Registriert: Fr 26.Nov, 2004 01:30
Kontaktdaten:

Beitrag von cbrkiter »

Naja, dass PHP normalerweise die Typen erkennt, weiß ich ja. Aber in diesem Fall will ich ja lediglich die Datensätze nacheinander ausgeben lassen. Die Sortierung sollte ja schon durch die SQL-Abfrage erfolgen und nicht nochmal durch Umsortierung in PHP. Daher war meine Hoffnung, es gäbe etwas wie

Code: Alles auswählen

SELECT NUMERIC(FeldX) AS y, * 
  FROM TABLE1 
  ORDER BY y DESC;
Weiß Du, wie ich das meine? Ich weiß halt nur nichts für NUMERIC().

//EDIT
Also NUMERIC wirds garantiert nicht sein. Es müsste wohl ein Datentyp wie FLOAT oder INT sein.
1. 'Man muss das Unm?gliche versuchen, um das M?gliche zu erreichen!' (Hermann Hesse)
2. 'The best way to learn something is to get your hands dirty and do it!' (keine Ahnung))
3. http://www.thw-kamen-bergkamen.de
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Dann wandele doch das Feld in einen Integer oder Long Integer Wert um. Dabei geht in der Regel kein Inhalt verloren (Backup ist aber bei sowas IMMER Pflicht!) und die Sortierung klappt dann nach Zahlen, wie man das gewohnt ist.
Alles andere würde an dieser Stelle nur unnötig Zeit kosten, da ja jeder Wert von String in Numerischen Werten erst konvertiert werden muss, um dann erst sortiert werden zu können.
Zumal ja nach Deiner Aussage eh nur Zahlen in dem Feld enthalten sind...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
cbrkiter
Beiträge: 170
Registriert: Fr 26.Nov, 2004 01:30
Kontaktdaten:

Beitrag von cbrkiter »

Jo, da das ursprüngliche Script ja nur einen Zähler in dem Feld speichert, gehe ich mal stark davon aus, das dort nur Zahlen enthalten sind. Das Script addiert auch immer nur 1 hinzu und fertig. Sinn und Zweck eines Zählers halt. ;)

Nagut, es wird wohl das einfachste sein. Danke Dir.


// EDIT

Hab nach langem googlen doch noch eine Lösung gefunden, die für mein Probelm als Vorlage herhalten konnte. So funktioniert es jetzt:

Code: Alles auswählen

SELECT *
	FROM TABLE1
	ORDER BY CAST(feldX AS SIGNED) DESC;
Ich dachte, ich schreib's mal noch hierher, falls es mal jemand gebrauchen könnte ;)
1. 'Man muss das Unm?gliche versuchen, um das M?gliche zu erreichen!' (Hermann Hesse)
2. 'The best way to learn something is to get your hands dirty and do it!' (keine Ahnung))
3. http://www.thw-kamen-bergkamen.de
Antworten