Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

PHP soll Werte nach definierten Informationen sortieren

Frage Entwicklung PHP

Mitglied: gechger

gechger (Level 1) - Jetzt verbinden

17.02.2009, aktualisiert 18.10.2012, 3990 Aufrufe, 8 Kommentare

in allen Anleitungen finde ich nur Sortierfunktionen, die nach Spalten inhalten funktionieren, ich brauche aber etwas Anderes

Hallo Forum,

nachdem ich mich nun reichlich mit sort(), usort(), ksort(), usw. beschäftigt habe, konnte ich trotzdem für meinen Sortierauftrag nichts passendes finden.
Aus einer MySql Datenbank bekomme ich in ein Array folgende Werte:

2009-02-17_12:54:32 table=BB bTYP=10103 bLOG=1488 bDAT=2009-02-17_12:53:49 bIMP= bFLAG=0 bGPS=V,4844.6661,N,01128.8240,E; bTER=6614 bPER=00000

Die Werte befinden sich in einer Tabellenspalte, die Felder sind durch TAB getrennt, also "bTYP=10103" TAB "bLog=1488" TAB usw.

Die üblichen Sortierregeln würden jetzt nach dem Datum vorne sortieren. Ich will die Daten aber nach dem Feld "bLOG" sortiert ausgeben, d.h. erst alle Werte mit Blog=00001, dann alle Werte blog=00002 usw. Dabei können je nach Abfrage bis zu 500 Datensätze im Array stehen und bis zu 40 verschieden Werte im bLog.

Wie bekomme ich das hin?

Jede Idee hilft weiter.

Schöne Grüße
Christof
Mitglied: ich1987
17.02.2009 um 14:35 Uhr
moin,

also auf die schnelle fällt mir auch keine passende Lösung ein.

Also was gehen würde ist wenn du jedes Array-Objekt in mehere Arrays zerlegst durch z.B. die Funktion "explode".
Dann nach dem Array "bLOG" sortiert und wieder ein einziges array zusammensetzt.

Das würde funktionieren, aber wie schnell, bzw. welche performance braucht, kann ich dir nicht genau sagen.


Gruß ich
Bitte warten ..
Mitglied: gechger
17.02.2009 um 14:56 Uhr
Hallo Ich,

den Weg habe ich schon probiert. Aber das hat auch nicht so richtig funktioniert, weil ich die anderen zugehörigen Werte ja auch brauche.

Der Ansatz war, per Explode (was ja auch funktioniert) die bLog Werte auszulesen. Aber dann über das gesamte Array nach dem Wert zu sortieren klappte nicht. Es wurde weiterhin nach dem Datum sortiert.

Eine weitere Idee wäre, die Arrays ID zu verändern, also alle Werte bLog=00001 mit einer Id 1 zu versehen, alle bLog=00002 mit einer 2, usw. Dann könnte ich nach den Array Nummern sortieren. Da weiss ich aber auch nicht, wie ich das hinbekommen soll.

Vielleicht mit automatischen hochzählen oder so:
if blogX >blogY $id=i++

Mal sehen was mir dazu noch einfällt.

Aber vielen Dank erstmal für Deinen Tip
Schöne Grüße
Christof
Bitte warten ..
Mitglied: godlie
17.02.2009, aktualisiert 18.10.2012
Ich will ja nicht vorschnell sein aber da hab ich dir schon geantwortet sogar mit Beispiel

http://www.administrator.de/forum/mysql-order-by-sortieren-nach-definie ...

habs gliech nach dem erstellen noch erweitert...
Bitte warten ..
Mitglied: gechger
17.02.2009 um 15:47 Uhr
richtig
habs nur noch mal hier gepostet, weil die php Abfrage im Bereich MySql wahrscheinlich falsch plaziert wäre. Der erste Ansatz war ja, es in einer order by Funktion zu lösen. PHP Fragen sind hier sicher besser aufgehoben, auch wenns letztendlich um das Gleiche Problem geht.
Bitte warten ..
Mitglied: dog
18.02.2009 um 02:07 Uhr
Ich weiß zwar nicht warum du ein gelöstes Problem nochmal lösen willst, aber denn:

01.
SELECT  *, 
02.
	SUBSTRING(t1.spalte FROM	 
03.
		CHAR_LENGTH(SUBSTRING_INDEX(t1.spalte,'=',3)) + 2 
04.
	FOR 
05.
06.
			CHAR_LENGTH(SUBSTRING_INDEX(t1.spalte,' ',4)) 
07.
08.
			CHAR_LENGTH(SUBSTRING_INDEX(t1.spalte,'=',3)) 
09.
10.
	) AS blog 
11.
	 
12.
FROM tbl2 AS t1 
13.
 
14.
ORDER BY blog ASC;
Das würde bei deinem Beispiel funktionieren (Achtung: Ich habe hier Leerzeichen statt Tabs verwendet).

Und demnächst halten wir uns dann an die Grundregeln der RDBMS-Programmierung: 1. Normalform: Der Wert jeder Spalte muss atomar sein... oder auf Deutsch: Es macht in der Praxis nur unter bestimmten Bedingungen sinn mehr als einen Wert in einer Spalte zu benutzen (wie man hier grade prima sieht )

Grüße

Max
Bitte warten ..
Mitglied: gechger
19.02.2009 um 09:43 Uhr
Hallo Max,

Du hast sicherlich recht, aber ich habe die Datenbank und die Datenübertragung nicht entworfen, Ich muß leider damit arbeiten, was mir vorgesetzt wurde und sehen, wie ich das Beste daraus mache. Ändern können wir es jedenfalls nicht mehr.

Aber jedenfalls vielen Dank für Deine Hilfe.

Schöne Grüße
Christof
Bitte warten ..
Mitglied: Guenni
21.02.2009 um 08:12 Uhr
Hi Christof,


ich nehme an, die Tabelle enthält 2 Spalten: Index und Werte.

Dann fragst du die Datensätze ab und speicherst die Werte in Unterarrays

in einem Array.

01.
<?php> 
02.
$query="select id,werte from tabelle4"
03.
$result=mysql_query($query); 
04.
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){ 
05.
 $lines[$row['id']]=explode("\t",$row['werte']); 
06.
07.
?>
Oder, falls kein Index existiert, mußt du diesen für die Unterarrays selber

erstellen.

01.
<?php> 
02.
$query="select werte from tabelle4"
03.
$result=mysql_query($query); 
04.
$i=0; 
05.
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){ 
06.
 $lines[$i]=explode("\t",$row['werte']); 
07.
 $i++; 
08.
09.
?>
Mit . . .

01.
<?php> 
02.
echo "Ausgabe unsortiert<pre><br>"
03.
print_r($lines); 
04.
echo "</pre>"
05.
?>
. . . werden die Unterarrays ausgegeben, was dann so aussehen sollte:

Array
(
[0] => Array
(
[0] => 2008-10-08_09:41:08
[1] => table=BB
[2] => bTYP=10110
[3] => bLOG=1488
[4] => bDAT=2008-10-08_09:40:02
[5] => bIMP=
[6] => bFLG=1
[7] => bGPS=V,4808.5868,N,01133.6092,E,
[8] => bTER=6614
[9] => bPER=00000
[10] => 2008-10-08 09:41:08
[11] => 9
)

[1] => Array
(
[0] => 2008-10-08_09:41:32
[1] => table=BB
[2] => bTYP=10103
[3] => bLOG=1447
[4] => bDAT=2008-10-08_09:42:49
[5] => bIMP=
[6] => bFLG=1
[7] => bGPS=A,5229.3003,N,01323.6167,E,
[8] => bTER=6593
[9] => bPER=5009
[10] =>
[11] => 2008-10-08 09:41:32
[12] => 9
)

usw..


Diese Unterarrays kannst du dann z.B. mit uasort sortieren und dabei einen

Index eines Unterarrays als Sortierkriterium mit angeben.

Dazu benötigt uasort eine benutzerdefinierte Vergleichsfunktion.

Wie man sieht, hat bLog=xxxx den Index 3, also wird die Vergleichsfunktion

wie folgt definiert:

01.
<?php> 
02.
function so($a, $b){ 
03.
 $Index=3; //Index von bLog=xxxx 
04.
 return (strcmp($a[$Index],$b[$Index])); 
05.
06.
?>
Sortiert werden die Unterarrays dann so:

01.
<?php> 
02.
/* 
03.
Der Name der Vergleichsfunktion wird ohne Klammern in Anführungszeichen 
04.
der Funktion uasort zusammen mit dem Array übergeben. 
05.
*/ 
06.
uasort($lines,"so");  
07.
?>

Das Ganze in einem Stück:

01.
<?php> 
02.
$query="select id,werte from tabelle4"
03.
$result=mysql_query($query); 
04.
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){ 
05.
 $lines[$row['id']]=explode("\t",$row['werte']); 
06.
07.
/* 
08.
Benutzerdefinierte Vergleichs-Funktion 
09.
*/ 
10.
function so($a, $b){ 
11.
 $Index=3; 
12.
 return (strcmp($a[$Index],$b[$Index])); 
13.
14.
/* 
15.
Ausgabe unsortiert 
16.
*/ 
17.
echo "Ausgabe unsortiert<pre><br>"
18.
print_r($lines); 
19.
echo "</pre>"
20.
/* 
21.
Unterarrays sortieren 
22.
*/ 
23.
uasort($lines,"so"); 
24.
/* 
25.
Ausgabe nach bLog=xxxx sortiert 
26.
*/ 
27.
echo "Ausgabe nach bLog=xxxx sortiert<pre><br>"
28.
print_r($lines); 
29.
echo "</pre>"
30.
?>
Gruß
Günni
Bitte warten ..
Mitglied: gechger
24.02.2009 um 14:05 Uhr
Hallo Günni,

so habe ich es jetzt gelöst:

01.
if (empty($kundenname)) 
02.
03.
echo 'Zur Überprüfung der Einbauten bitte Kundennamen, Mobilmasternummer und Datum eingeben.','<br>'
04.
05.
else 
06.
07.
  $host1 = "h1332018.stratoserver.net"
08.
  $user1 = "$row[1]"
09.
  $kennwort1 = "$row[3]"
10.
  $dbname1 = "$row[2]"
11.
  $tabelle1 ="$row[4]"
12.
  $anmeldung="$row[5]"
13.
 
14.
  $cldb = mysql_connect($host1, $anmeldung, $kennwort1); // or die(mysql_error()); 
15.
  mysql_select_db($dbname1); 
16.
  $sql1 = ("SELECT * FROM $tabelle1 where werte like '%bLOG=$fahrzeug%' and werte like '%$datum%' and werte like '%btyp=$typ%' "); 
17.
  $abfrage = mysql_db_query($dbname1,$sql1); // or die(mysql_error()); 
18.
 
19.
  ?></font></p> 
20.
                <font color="#291455"
21.
                        <table rules=row> 
22.
                                <? 
23.
  while($array = mysql_fetch_array($abfrage)){ 
24.
        $werte=explode("\t", $array[1]); 
25.
        $blogValue = ($werte[3]); 
26.
        $allInformation[$blogValue][] = $werte
27.
28.
        ksort($allInformation); 
29.
        foreach($allInformation as $array1){ 
30.
                 foreach($array1 as $array2){ 
31.
 
32.
?> 
33.
<table> 
34.
<tr> 
35.
<td width="40"><?echo $array2[1];?></td> 
36.
<td width="100"><?echo $array2[2];?></td> 
37.
<td width="100"><?echo $array2[3];?></td> 
38.
<td width="200"><?echo $array2[4];?></td> 
39.
<td width="100"><?echo $array2[5];?></td> 
40.
<td width="100"><?echo $array2[6];?></td> 
41.
<td width="260"><?echo $array2[7];?></td> 
42.
<td width="100"><?echo $array2[8];?></td> 
43.
<td width="100"><?echo $array2[9];?></td> 
44.
</tr> 
45.
</table> 
46.
<? 
47.
 
48.
 
49.
                          }} 
50.
 
51.
52.
 
53.
?> 
54.
</font>
und es funktioniert tadellos.

Vielen Dank für Deine ausführliche Erkläreung.

Schöne Grüße
Christof
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell und XMLs -Von definierten XML Tags die Werte ändern (10)

Frage von rdklie zum Thema Batch & Shell ...

PHP
gelöst Php regex und Array (5)

Frage von Thomas91 zum Thema PHP ...

Netzwerkmanagement
gelöst Icingaweb2 Werte für das NRPE CheckDisk anpassen (8)

Frage von M.Marz zum Thema Netzwerkmanagement ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...