Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

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, 4019 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
Windows Userverwaltung
gelöst RDP definierte Benutzer auf definierten Servern über GPO (11)

Frage von mc-doubleyou zum Thema Windows Userverwaltung ...

Tipps & Tricks
FTP Hosting nach Letzte Änderungen sortieren (2)

Frage von table1 zum Thema Tipps & Tricks ...

Microsoft Office
Access 2016 - Ip Adressen sortieren (5)

Frage von NorbertKn zum Thema Microsoft Office ...

Neue Wissensbeiträge
Windows Update

Novemberpatches und Nadeldrucker bereiten Kopfschmerzen

(14)

Tipp von MettGurke zum Thema Windows Update ...

Windows 10

Abhilfe für Abstürze von CDPUsersvc auf Win10 1607 und 2016 1607

(7)

Tipp von DerWoWusste zum Thema Windows 10 ...

RedHat, CentOS, Fedora

Fedora 27 ist verfügbar

Information von Frank zum Thema RedHat, CentOS, Fedora ...

Heiß diskutierte Inhalte
Windows Server
Kennwort vergessen bei Hyper vserver 2012r (12)

Frage von jensgebken zum Thema Windows Server ...

Linux Desktop
Bildschirmauflösung unter Linux festlegen (12)

Frage von itebob zum Thema Linux Desktop ...

Windows Userverwaltung
gelöst Administrator hat alle Rechte verloren (10)

Frage von mrdead zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
Gebäude mit WLAN ausstatten (9)

Frage von udobec zum Thema LAN, WAN, Wireless ...