Spalten Splitten und als normale Zeile ausgeben
Hallo,
ich brauche einen Ansatz. geht um php/mysql.
Also ich habe eine Tabelle:
id, Datum, Nummer,Anbieter
Nun habe ich das Problem, dass bei manchen Datensätzen gewollt 2 Wete durch Semikolon getrennt drinne stehen. Die Sollen mit ausgegeben werden.
Bsp.:
1 | 2018.08.08 12345 | 4
2 | 2018.08.08 |12346 | 4
3 | 2018.08.08 |12347 | 6
4 | 2018.08.08 |12349 | 7
5 | 2018.08.08 |123415 | 6
6 | 2018.08.08 |12345;3334532;88665 | 7
7 | 2018.08.08 |123411;3334542;| 2
Rauskommen soll zum Schluss eine Übersicht Wieviel Vorgänge pro Anbieter pro Datum. Normalerwweise mit count und group by.
Aber bei den Ids 6 und 7 habe ich beispielhaft das Proble, dass ich die Nummer aufspiltten muss.
Eine Idee, ist das ganze zu splitten und dann in eine tmp Table rein zu packen und diese dann wie gehabt ab zu fragen. Andere Ide, mit if zu arbeiten und SUBSTRING_INDEX(SUBSTRING_INDEX(TrackingID, ';', 1), ';', -1) as first,
SUBSTRING_INDEX(SUBSTRING_INDEX(TrackingID, ';', 2), ';', -1) as last
zu arbeiten. Nur da die Anzahl der Nummern nicht fix, ist, müsste ic da erst wieder die ";" zählen und dann die Abfragen in einer Schleife machen. Und das ist doch auch Käse.
Irgendwer eine Idee?
mfG
tsunami
ich brauche einen Ansatz. geht um php/mysql.
Also ich habe eine Tabelle:
id, Datum, Nummer,Anbieter
Nun habe ich das Problem, dass bei manchen Datensätzen gewollt 2 Wete durch Semikolon getrennt drinne stehen. Die Sollen mit ausgegeben werden.
Bsp.:
1 | 2018.08.08 12345 | 4
2 | 2018.08.08 |12346 | 4
3 | 2018.08.08 |12347 | 6
4 | 2018.08.08 |12349 | 7
5 | 2018.08.08 |123415 | 6
6 | 2018.08.08 |12345;3334532;88665 | 7
7 | 2018.08.08 |123411;3334542;| 2
Rauskommen soll zum Schluss eine Übersicht Wieviel Vorgänge pro Anbieter pro Datum. Normalerwweise mit count und group by.
Aber bei den Ids 6 und 7 habe ich beispielhaft das Proble, dass ich die Nummer aufspiltten muss.
Eine Idee, ist das ganze zu splitten und dann in eine tmp Table rein zu packen und diese dann wie gehabt ab zu fragen. Andere Ide, mit if zu arbeiten und SUBSTRING_INDEX(SUBSTRING_INDEX(TrackingID, ';', 1), ';', -1) as first,
SUBSTRING_INDEX(SUBSTRING_INDEX(TrackingID, ';', 2), ';', -1) as last
zu arbeiten. Nur da die Anzahl der Nummern nicht fix, ist, müsste ic da erst wieder die ";" zählen und dann die Abfragen in einer Schleife machen. Und das ist doch auch Käse.
Irgendwer eine Idee?
mfG
tsunami
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 387234
Url: https://administrator.de/forum/spalten-splitten-und-als-normale-zeile-ausgeben-387234.html
Ausgedruckt am: 12.04.2025 um 00:04 Uhr
8 Kommentare
Neuester Kommentar
Moin,
Genau so. Anders wirst Du nicht an das Ergebnis kommen. Dabei musst Du nicht unbedingt die drei Werte, die bei den DS gleich sind, in eine Variable schreiben. Du kannst sie ja auch direkt aus dem aktiven Datensatzobjekt auslesen.
hth
Erik
Zitat von @tsunami:
6 | 2018.08.08 | 12345 | 7
6 | 2018.08.08 | 3334532 | 7
6 | 2018.08.08 | 88665 | 7
Ich könnte natürlich die fixen Werte jeweils in eine Var schreiben, dass Array durchlaufen lassen. Danach dei Var löschen.
Also was weiß ich:
$x=6
$datum =2018.08.08;
Dann mit for each das array durchlaufen und dann die var löschen....
6 | 2018.08.08 | 12345 | 7
6 | 2018.08.08 | 3334532 | 7
6 | 2018.08.08 | 88665 | 7
Ich könnte natürlich die fixen Werte jeweils in eine Var schreiben, dass Array durchlaufen lassen. Danach dei Var löschen.
Also was weiß ich:
$x=6
$datum =2018.08.08;
Dann mit for each das array durchlaufen und dann die var löschen....
Genau so. Anders wirst Du nicht an das Ergebnis kommen. Dabei musst Du nicht unbedingt die drei Werte, die bei den DS gleich sind, in eine Variable schreiben. Du kannst sie ja auch direkt aus dem aktiven Datensatzobjekt auslesen.
hth
Erik

So?
DB:

Ergebnis:

Gruß speedlink
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
function connect(){
$DB_HOST = 'localhost';
$DB_NAME = 'MYDB';
$DB_USER = 'MYUSER';
$DB_PASSWORD = 'MYPASSWORD';
$db = new PDO('mysql:host='.$DB_HOST .';dbname='.$DB_NAME.';charset=utf8', $DB_USER, $DB_PASSWORD,array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
return $db;
}
$db = connect();
$result = $db->query('Select * From MEINETABELLE');
echo "<table><tr><th>ID</th><th>Datum</th><th>Nummer</th><th>Anbieter</th></tr>";
foreach($result as $row){
$numbers = preg_split('/;/',$row['Nummer'],-1,PREG_SPLIT_NO_EMPTY);
foreach($numbers as $number){
echo "<tr><td>" . $row['id'] . "</td><td>" . $row['Datum'] . "</td><td>" . $number . "</td><td>" . $row['Anbieter'] . "</td></tr>";
}
}
echo "</table>";
?>
DB:

Ergebnis:

Gruß speedlink