gechger
Goto Top

Mysql order by sortieren nach definierten Informationen

habe mich intensiv mit dem order by von MySql beschäftigt, aber keine Lösung für mein Ziel gefunden.

Hallo Forum,

vielleicht hat jemand von Euch eine Idee.
Ich weiss, daß ich mit order by Spalteninhalte sortieren kann. Ich habe aber Informationen in einer Datenbank, die sich so nicht sortieren lassen, zumindest nicht so wie ich es brauche.

So sieht ein Datensatz in der Spalte "Werte" aus:
2009-02-17_06:13:56 table=BB bTYP=10105 bLOG=1495 bDAT=2009-02-17_06:13:52 bIMP=2497 bFLAG=0 bGPS=A,4846.5878,N,01138.3975,E, bTER=6595 bPER=6009

Die Informationen liegen mit TAB getrennt vor, also bTYP=10105 TAB bLOG=1495 TAB usw,

Die Ausgabe soll jetzt alle Inhalte sortiert nach der Information "bLog=XXXX" ausgeben, also zuerst alle Werte "bLog=00001" dann "alle Werte "blog=0002",...

Kann das mit einer order by Funktion durchgeführt werden oder muß das aufwändiger in php gemacht werden?

Viele Dank für jede Idee.

Schöne Grüße
Christof

Content-ID: 109222

Url: https://administrator.de/contentid/109222

Ausgedruckt am: 22.11.2024 um 04:11 Uhr

godlie
godlie 17.02.2009 um 11:47:24 Uhr
Goto Top
Grundlegendes Datenbankdesign fürn arsch?

Trenn die Feider auf ( btyp, blog, .... ) dann kannst nach ihnen sortieren mit ihnen arbeiten......
Eine Mysql Tabelle kann auch mehr als 3 columns.

Alles andere ( es gibt durchaus ansätze wie man sowas lösen kann ) ist nicht effizeient genug. Umbau der Datenbank bringt dir da mehr.
gechger
gechger 17.02.2009 um 11:59:40 Uhr
Goto Top
Hi Godlie,

Umbau geht leider nicht. Die Datensätze werden so von Blackbox-Geräten in Fahrzeugen produziert, und von verschiedenen Programmen weiterverarbeitet, die alle auf dieser Struktur beruhen. Zur besseren Datenanalyse möchte ich aber die Sortierung nach blog haben. Wenn ein Kunde 40 Fahrzeuge im Einsatz hat und die Daten zeitgleich gesendet werden, stehen sie in der Datenbank so wie sie reinlaufen. Sehr unübersichtlich.

Die Datenbank besteht aus vier Spalten: id (automatisch generiert), den Werten wie oben beschrieben, dem Datum und einem Flag (abgeholt oder noch icht abgeholt).

Dann muß ich das wohl in php lösen.

Aber vielen Dank für Deine Antwort.
Schöne Grüße
Christof
godlie
godlie 17.02.2009 um 13:55:11 Uhr
Goto Top
kannst mir ein paar demodatensätze in csv zukommen lassen?

Sodala mir war grad faad:

$var = "2009-02-17_06:13:56 table=BB bTYP=10105 bLOG=1495 bDAT=2009-02-17_06:13:52 bIMP=2497 bFLAG=0 bGPS=A,4846.5878,N,01138.3975,E, bTER=6595 bPER=6009";  
$var = "2009-02-17_06:13:56 table=BB bTYP=10105 bLOG=1235 bDAT=2009-02-17_06:13:52 bIMP=2497 bFLAG=0 bGPS=A,4846.5878,N,01138.3975,E, bTER=6595 bPER=6009";  
$var = "2009-02-17_06:13:56 table=BB bTYP=10105 bLOG=1235 bDAT=2009-02-17_06:13:52 bIMP=2497 bFLAG=0 bGPS=A,4846.5878,N,01138.3975,E, bTER=6595 bPER=6009";  
$var = "2009-02-17_06:13:56 table=BB bTYP=10105 bLOG=1285 bDAT=2009-02-17_06:13:52 bIMP=2497 bFLAG=0 bGPS=A,4846.5878,N,01138.3975,E, bTER=6595 bPER=6009";  
$var = "2009-02-17_06:13:56 table=BB bTYP=10105 bLOG=12 bDAT=2009-02-17_06:13:52 bIMP=2497 bFLAG=0 bGPS=A,4846.5878,N,01138.3975,E, bTER=6595 bPER=6009";  
$var = "2009-02-17_06:13:56 table=BB bTYP=10105 bLOG=0001 bDAT=2009-02-17_06:13:52 bIMP=2497 bFLAG=0 bGPS=A,4846.5878,N,01138.3975,E, bTER=6595 bPER=6009";  

$arr = array();
foreach( $var as $val )
{
  $tes = explode(" ",$val);  
  $blogValue = substr($tes[3],5,4);
  $arr[$blogValue] = $val;
}
ksort($arr);
var_dump( $arr );
Hier hast du dann ein Mehrdimensionales Array ansprechbar über den Blog Wert also z.B.: $arr["1945"]
mit ksort das ganze noch sortiert und dann viel spaß damit.....
gechger
gechger 17.02.2009 um 15:55:02 Uhr
Goto Top
Hallo Godie,

habe mich mal mit Deinem Vorschlag befasst. Die Funktion $var, muß die mit dem Array verbunden werden, in dem die Werte bereits stehen?

<code type php>
while($array = mysql_fetch_array($abfrage)){
$var=$array;
$arr = array();
foreach( $var as $val )
{
$tes = explode("\t ",$val);
$blogValue = substr($tes[3],5,4);
$arr[$blogValue] = $val;
}
ksort($arr);
var_dump( $arr );


Schöne Grüße
Christof

PS: hier 1 findest Du ein paar Beispiel Datensätze
godlie
godlie 17.02.2009 um 16:02:57 Uhr
Goto Top
Ich bin jetzt nur zu faul das nachzubauen also mal auf gut glück raten face-smile

$allInformation=array();

//..... die ganze datenbankverbindungsundsonstigesache......

while($array = mysql_fetch_array($abfrage)) {
  $werte = explode("\t ", $abfrage[1] );  //bin mir hier nicht so ganz sicher je nachdem was für eine spalte es ist..  
  $blogValue = $werte[3],5,4);
  $allInformation[$blogValue] = $werte;
}

//ein abschliesendes Sortieren
ksort($allInformation);

//und mal schaun was rauskommt
echo '<pre>'  
var_dump($allInformation);
echo '</pre>';  

// pre tags damits strukturierter aussieht
gechger
gechger 17.02.2009 um 16:14:22 Uhr
Goto Top
Hallo Godie,

habs jetzt mal angepasst

<code php>
while($array = mysql_fetch_array($abfrage)){
$werte=explode("\t", $abfrage[1]);
$blogValue = ($werte[4]);
$allInformation[$blogValue] = $werte;
}
ksort($allInformation);
echo "<pre>";
var_dump( $arr );
echo "</pre>";


und es kommt war raus:

NULL face-smile

Christof

PS: man sollte allerdings auch var_dump( $allinformation) nehmen anstatt var_dump( $arr );
godlie
godlie 17.02.2009 um 16:22:39 Uhr
Goto Top
Also gut dann ncohmal ans Reisbrett

$allInformation=array(); 
//..... die ganze datenbankverbindungsundsonstigesache...... 

while($array = mysql_fetch_array($abfrage)) { 
  $werte = explode("\t ", $array[1] );  //<-- hier war ein fehler bin mir hier nicht so ganz sicher je nachdem was für eine spalte es ist..   
  $blogValue = substr($werte[3],5,4); 
  $allInformation[$blogValue] = $array;  //<-- da war auch ein fehler
} 

//ein abschliesendes Sortieren
ksort($allInformation); 
echo '<pre>'   
var_dump($allInformation); 
echo '</pre>';   
gechger
gechger 17.02.2009 um 16:24:23 Uhr
Goto Top
bis jetzt kriege ich nur so was raus:

Array
(
=> Array
(
=> Array
(
=>
)

[1] => Array
(
=>
)

[2] => Array
(
=>
)
godlie
godlie 17.02.2009 um 16:26:16 Uhr
Goto Top
Hab oben noch was ausgebessert, damit sollte es jetzt funkionieren ansonsten lass mir Demodaten zukommen, dann bau ich das in eine DB und teste selbst mal durch.
gechger
gechger 17.02.2009 um 16:39:48 Uhr
Goto Top
wie es aussieht scheint es damit zu klappen:

<code php>
while($array = mysql_fetch_array($abfrage)){
$werte=explode("\t", $array[1]);
$blogValue = ($werte[3]);
$allInformation[$blogValue] = $werte;
echo "<pre>";
print_r( $blogValue);
print_r($werte[3]);
echo "</pre>";
}
ksort($allInformation);
echo "<pre>";
print_r( $allInformation);
echo "</pre>";


Ichmach mir die Ausgabe jetzt nur noch schön.

Viiieeelen Dank
Christof