Anzeige

 Array Problem


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…
#1
Hallo zusammen,

also langsam hab Ich den verdacht, dass Ich vergesslich oder zu Blöde beim Suchen bin. :D

Also Ich habe folgendes vor:
Über ein Script lass ich mir Daten via JSON erstellen.
Diese sollen dann so gesplittet werden, das Ich daraus eine SQL Abfrage genieren kann.

Um euch auch zu Zeigen wie mein JSON aussieht:
JSON:
[{"perMail":"0","reporttype":"Excel","perFTP":"0","perCSV":"0","datas":[{"feld_name":"feldWertA"},{"feld_name":"feldWertB"},{"von":"Email1"},{"von":"Email2"},{"an":"Email1"},{"an":"Email2"},{"cc":"Email1"},{"cc":"Email2"},{"bcc":"Email1"},{"bcc":"Email2"},{"replyto":"Email1"},{"replyto":"Email2"},{"Intervalldays":"montag"},{"intervall":"3"},{"start":"10"},{"show_from":"12.11.2018"},{"show_to":"01.01.2050"},{"csvSeparator":"pipeline"},{"mfid":"ZAHL"}]}]
Aktuell lese Ich es mir so aus:
PHP:
<?php
$excelData = $_POST['arrValue'];
$jsonData = json_decode($excelData);
$excelDatas = $jsonData['0']->datas;
$dataCount = count($excelDatas);
$werte_aus_array = array();

for($i = 0; $i < $dataCount; $i++) {
    foreach($excelDatas[$i] as $key => $value) {
        echo "{$key} => {$value}\r\n<br />";
        $werte_aus_array[$key] = [$key => $value];
    }
}

$werte_aus_array['mail'] = $jsonData['0']->perMail;
$werte_aus_array['reporting'] = $jsonData['0']->reporttype;
$werte_aus_array['ftp'] = $jsonData['0']->perFTP;
$werte_aus_array['csv'] = $jsonData['0']->perCSV;

printf('<pre>%s</pre>', print_r($werte_aus_array, true));
?>
Aussage von ECHO:
Code:
feld_name => Feld1
feld_name => Feld2
von => Email1
von => Email2
an => Email1
an => Email2
cc => Email1
cc => Email2
bcc => Email1
bcc => Email2
replyto => Email1
replyto => Email2
Intervalldays => montag
intervall => 3
start => 10
show_from => 12.11.2018
show_to => 01.01.2050
csvSeparator => pipeline
mfid => ZAHL
Per DEBUGGING:
Code:
Array
(
    [feld_name] => Array
        (
            [0] => Feld2
        )

    [von] => Array
        (
            [0] => Email2
        )

    [an] => Array
        (
            [0] => Email2
        )

    [cc] => Array
        (
            [0] => Email2
        )

    [bcc] => Array
        (
            [0] => Email2
        )

    [replyto] => Array
        (
            [0] => Email2
        )

    [Intervalldays] => Array
        (
            [0] => montag
        )

    [intervall] => Array
        (
            [0] => 3
        )

    [start] => Array
        (
            [0] => 10
        )

    [show_from] => Array
        (
            [0] => 12.11.2018
        )

    [show_to] => Array
        (
            [0] => 01.01.2050
        )

    [csvSeparator] => Array
        (
            [0] => pipeline
        )

    [mfid] => Array
        (
            [0] => ZAHL
        )

    [mail] => 0
    [reporting] => Excel
    [ftp] => 0
    [csv] => 0
)
Wie man erkennt, werden nur die 2ten Werte ausgegeben, nicht wie bei der ECHO - Variante, alle...

Nun Ich möchte eine SQL Abfrage damit aufbauen und die Werte die mehrfach vorkommen, müssen in der Abfrage auch mehrfach erscheinen.
Kommen nur einzelne Werte... dann logisch sollen nur die Werte auch einmal als SQL erstellt sein/werden

Beispiel SQL bei mehrfach werten:
SQL:
SELECT
    [mf_id] as id,
    [Feld1].[feld_wert] as Feld1,
    [Feld2].[feld_wert] as Feld2,
    [Feld1].[feld_wert] as Feld1,
    [Feld2].[feld_wert] as Feld2,
    [Feld1].[feld_wert] as Feld1,
    [Feld2].[feld_wert] as Feld2,
    [Feld1].[feld_wert] as Feld1,
    [Feld2].[feld_wert] as Feld2,
etc...
FROM
    [TABELLE_X] x
    left join [TABELLE_Y] Feld1 on [x].[id] = Feld1.[id] AND Feld1.[feld_name] = 'Feldwert1'
    left join [TABELLE_Y] Feld2 on [x].[id] = Feld2.[id] AND Feld2.[feld_name] = 'Feldwert2'
    left join [TABELLE_Y] Feld1 on [x].[id] = Feld1.[id] AND Feld1.[feld_name] = 'Feldwert1'
    left join [TABELLE_Y] Feld2 on [x].[id] = Feld2.[id] AND Feld2.[feld_name] = 'Feldwert2'
    left join [TABELLE_Y] Feld1 on [x].[id] = Feld1.[id] AND Feld1.[feld_name] = 'Feldwert1'
    left join [TABELLE_Y] Feld2 on [x].[id] = Feld2.[id] AND Feld2.[feld_name] = 'Feldwert2'
    left join [TABELLE_Y] Email1 on [x].[id] = Email1.[id] AND Email1.[feld_name] = 'Email1'
    left join [TABELLE_Y] Email2 on [x].[id] = Email2.[id] AND Email2.[feld_name] = 'Email2'
    left join [TABELLE_Y] Email1 on [x].[id] = Email1.[id] AND Email1.[feld_name] = 'Email1'
    left join [TABELLE_Y] Email2 on [x].[id] = Email2.[id] AND Email2.[feld_name] = 'Email2'
    left join [TABELLE_Y] Email1 on [x].[id] = Email1.[id] AND Email1.[feld_name] = 'Email1'
    left join [TABELLE_Y] Email2 on [x].[id] = Email2.[id] AND Email2.[feld_name] = 'Email2'
etc...
WHERE
    DATEPART(WEEK, [versand_datum]) = DATEPART(WEEK, GETDATE() - 7)
    and
    DATEPART(YEAR, [versand_datum]) = DATEPART(YEAR, GETDATE())
    and
    [x].[id] = ZAHL
ORDER BY
    versanddatum
Kann mir hier einer sagen ob es zu Umständlich ist, wie Ich es vor habe?
Falls zu Umständlich, wie kann Ich es einfacher Gestalten?

Vielen Dank :)
 

Kalito

Erfahrenes Mitglied
#2
Hallo,

mit dem Teil
PHP:
$werte_aus_array[$key] = [$key => $value];
in deiner foreach-Schleife überschreibst du deinen Inhalt mit dem letzten Wert. Du musst noch einen Index einfügen und je nach Aufgabenstellung hast du 2 Möglichkeiten:

PHP:
for($i = 0; $i < $dataCount; $i++) {
    foreach($excelDatas[$i] as $key => $value) 
    {
        echo "{$key} => {$value}\r\n<br />";

        $werte_aus_array_v1[$i][] = [$key => $value];
        $werte_aus_array_v2[$key][] = [$i=> $value];

    }
}
Bei deinem SQL bin ich mir nicht sicher ob diese Abfrage so performant ist.
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…
Anzeige
Anzeige