Top-Themen

Aktuelle Themen (A bis Z)

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, 4023 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 ..
Ähnliche Inhalte
Microsoft Office
Wert sortieren . einer Sortierung zuordnen
gelöst Frage von Inge88Microsoft Office2 Kommentare

Einen schönen Guten Morgen an alle hilfeleistenden Administratoren, leider steh ich schon wieder vor einem Problemchen und kann es ...

Batch & Shell
Powershell und XMLs -Von definierten XML Tags die Werte ändern
gelöst Frage von rdklieBatch & Shell10 Kommentare

Hallo Zusammen Ich steh wohl grad bisschen auf dem Schlauch. Ich habe ein XML mit folgendem Aufbau: Ziel dieser ...

Microsoft Office
Excel - Werte bestimmter Zellen nach definierter Suche auslesen
gelöst Frage von Excel-StarterMicrosoft Office7 Kommentare

Hallo zusammen, ich bräuchte wieder einmal eure Hilfe für folgende Excelauswertung: Aus einer Lagerbestandsliste sollen jeweils für einen Artikel ...

Microsoft Office
Kein Wert beim Sortieren, bzw NV wird nicht als NULL angezeigt
Frage von Inge88Microsoft Office

Ein feierabendliches Hallöchen an Alle, langsam steigere ich mich komme aber ständig an meine Grenzen :-) :-( Ich haben ...

Neue Wissensbeiträge
Microsoft

Update KB4073578 für AMD CPU (Spectre und Meltdown Lücke)

Information von sabines vor 5 StundenMicrosoft

Wegen Problemen (BOSD, nicht startende PCs) wurde das Update KB4056897 und KB4056894 für AMD CPUs zurückgezogen. Dieses Update KB4073578 ...

Mac OS X

MacOS wo ist die Tilde ?

Tipp von Alchimedes vor 18 StundenMac OS X3 Kommentare

Hallo, ich hab eine MacOS qwertz Keyboard auf US Layout umgestellt da die Sonderzeichen besser erreichbar sind. Leider fehlt ...

Datenschutz

Weitere Informationen zum Sicherheitsproblem BeA

Information von Penny.Cilin vor 1 TagDatenschutz

Im folgenden ein weiterer Bericht über die Sicherheitsprobleme von Bea. Fataler Konstruktionsfehler im besonderen elektronischen Anwaltspostfach Gruss Penny

Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 1 TagWindows 103 Kommentare

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Heiß diskutierte Inhalte
Batch & Shell
Anmeldevorgang für Informatikraum (Schule) unter Windows
gelöst Frage von IngenieursBatch & Shell25 Kommentare

Hey zusammen, ich werde in naher Zukunft den Informatik Raum meiner jetzigen Schule von dem aktuellen Betreiber übernehmen (Vertrag ...

Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von fyrb38Windows 1019 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...

Netzwerkgrundlagen
Welches Modem für VDSL 50000 der T-Com
Frage von Windows10GegnerNetzwerkgrundlagen18 Kommentare

Hallo, ein Kollege von mir will sich VDSL50000 von der T-Com holen, um daran einen Server zu betreiben. Ich ...