PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Array mit einer Interbase SQL Abfrage füllen



Andislack
01-08-2004, 23:58
Hi!

Ich benötige eine Sortierung nach einem Feld in der DB. Das dumme ist, dass das Feld als CHAR(5) angelegt ist, aber Zahlen enthält. Sortiere ich nach den Zahlen kommt 1,10,11,12,2,20 usw... is ja auch logisch bei einem CHAR Feld.
Jetzt hab ich mir das ganze in ein Array holen wollen, dieses Sortieren und ausgeben.
Ich arbeite hier mit Interbase und diese hat keine Funktion àla mysql_fetch_array().
Jetzt hab ich mir das hier dafür hingebastelt:



$select_tav_item = " SELECT ERSATZART,BEZEICHNUNG2ER,GRUPPE
FROM CCKERSATZART
WHERE ARTIKELNR = '$row[0]'
ORDER BY GRUPPE ASC";
$query_tav_item = ibase_query($select_tav_item);
while($row_tav = ibase_fetch_row($query_tav_item))
{
$tav_array[$row_tav[2]] = $row_tav[0];
$desc_array[$row_tav[2]] = $row_tav[1];
}
ksort($tav_array);
ksort($desc_array);
foreach($tav_array as $k=>$elem)
{
echo $k." -> ";
echo $elem." -> ";
echo $desc_array[$k]."<br>";
}

Meine Frage:
Geht das mit dem Array füllen in der while Schleife auch einfacher?

Danke ANdi

Hans-Georg Normann
02-08-2004, 19:12
Hmm, schlage mich zwar mit Firebird rum, aber vielleicht schnallts dein Interbase ja auch

CAST( )
Converts a column from one datatype to another. Available in SQL, DSQL, and isql.
Syntax CAST ( value AS datatype) Hilft dir das?

Hans

Andislack
02-08-2004, 23:48
Hallo Hans,
prinzipiell ja eigentlich genau das was ich brauche, doch leider funktioniert es so auch nicht, zumindest nicht wie ich es anwende :-)



$select_tav_item = " SELECT ERSATZART,BEZEICHNUNG2ER,CAST(GRUPPE as int)
FROM CCKERSATZART
WHERE ARTIKELNR = '$row[0]'
ORDER BY GRUPPE ASC";
$query_tav_item = ibase_query($select_tav_item);

while($row_tav = ibase_fetch_row($query_tav_item))
{
echo gettype($row_tav[2])." --> ".$row_tav[2]."<br>";
}
Mach ich noch irgendwas falsch? Er sortiert immer noch als wenns ein CHAR Feld ist - keine Änderung zu bemerken.
Er gibt mir aber den Typen korrekt geändert als integer aus. :confused:
Hab im übrigen auch Firebird, hab aber bisher noch nix gehabt, wo die Interbase SQL nicht ging.
Noch ne Idee?

Gruss Andi

Hans-Georg Normann
03-08-2004, 20:48
Hi Andislack

funktioniert das?
ORDER BY CAST(GRUPPE AS INT) ASC (ich kann es momentan auch nicht ausprobieren, rate deshalb auch nur rum)

Hans

Andislack
04-08-2004, 04:33
Hi Hans,
leider nein - diese Variante hatte ich auch schon ausprobiert - da gibts nen Syntax Fehler...
Naja auch nicht weiter wild...wäre schön gewesen, aber is jetzt auch nicht so schlimm.

Trotzdem danke für deine Hilfe
Gruss Andi

Hans-Georg Normann
04-08-2004, 21:00
Hehehe, wer wird denn so schnell aufgeben?

Verlager doch das Problem von PHP nach Interbase. Was ich damit sagen will ist, dass du in Interbase doch Views erzeugen kannst. Und die können dann das Feld als Integer darstellen. Damit kannst du dann auch entsprechend sortieren.

Hans

Andislack
05-08-2004, 00:29
Hi,
soweit hab ich mich mit Interbase noch nicht beschäftigt, muss ich mich mal ransetzen...
Bin jetzt erstmal im wohlverdienten Urlaub ;)
Meld mich nochmal wenn ich das ausprobiert habe und es wahrscheinlich erstmal fehlschlägt :D
Gruss Andi