tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
525
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    -André- -André- ist offline Mitglied Gold
    Registriert seit
    Jul 2006
    Beiträge
    115
    Hallo,

    ich habe folgende Frage:

    In einer Tabelle habe ich eine Spalte, in der ein Array als JSON String gespeichert ist. Kann man innerhalb einer MYSQL Datenbank diesen String zurück in ein Array verwandeln, und dann z.B. den ersten eintrag und den letzten Eintrag des Arrays in einem View als eigene Spalte ausgeben?


    Gruß

    -André-
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Wie komplex ist dein JSON-String?

    Zeig aml ein Besipiel wie der dann aussieht.
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    -André- -André- ist offline Mitglied Gold
    Registriert seit
    Jul 2006
    Beiträge
    115
    In dem JSON String sind nur Datumswerte eingetragen, also zB.:
    ["2012-01-09","2012-01-16","2012-01-23","2012-01-30","2012-02-06","2012-02-13","2012-02-27","2012-03-05","2012-03-12","2012-03-19"]

    Allerdings habe die kodierten Array unterschiedliche längen.

    Gruß

    -André-
     

  4. #4
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    relativ einfach.
    zuerst die [] und die " entfernen und anschliessend SUBSTRING_INDEX() das erste und letzte Datum auslesen

    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    SELECT
        SUBSTRING_INDEX(date_list, ',', 1) AS first_date,
        SUBSTRING_INDEX(date_list, ',', -1) AS last_date,
        prepared_data.*
    FROM    
        (
            SELECT
                table_data.*,
                -- Entferne die [, ] und die "
                REPLACE(TRIM('[' FROM TRIM(']' FROM table_data.json)), '"', '') AS date_list
            FROM
                -- Simuliere die Daten
                (
                    SELECT
                        1 AS id,
                        '["2012-01-09","2012-01-16","2012-01-23","2012-01-30","2012-02-06","2012-02-13","2012-02-27","2012-03-05","2012-03-12","2012-03-19"]' AS json
                    UNION ALL SELECT
                        2 AS id,
                        '["2012-01-15","2012-01-16","2012-01-23","2012-01-30","2012-02-06"]' AS json
                    UNION ALL SELECT
                        3 AS id,
                        NULL AS json
                ) AS table_data
        ) AS prepared_data

    Ergibt
    Code :
    1
    2
    3
    4
    5
    
    first_date | last_date  | id | json                                                                                                            | date_list
    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    2012-01-09 | 2012-03-19 | 1  | [2012-01-09,2012-01-16,2012-01-23,2012-01-30,2012-02-06,2012-02-13,2012-02-27,2012-03-05,2012-03-12,2012-03-19] | 2012-01-09,2012-01-16,2012-01-23,2012-01-30,2012-02-06,2012-02-13,2012-02-27,2012-03-05,2012-03-12,2012-03-19
    2012-01-15 | 2012-02-06 | 2  | [2012-01-15,2012-01-16,2012-01-23,2012-01-30,2012-02-06]                                                        | 2012-01-15,2012-01-16,2012-01-23,2012-01-30,2012-02-06
    NULL       | NULL       | 3  | NULL                                                                                                            | NULL


    Nachtrag: Wenn du den Datumsstring in ein Datum wandeln willst, dann kannst du ncoh STR_TO_DATE() über das Feld machen
    Code sql:
    1
    2
    3
    4
    
    ...
        STR_TO_DATE(SUBSTRING_INDEX(date_list, ',', 1), '%Y-%m-%d') AS first_date,
        STR_TO_DATE(SUBSTRING_INDEX(date_list, ',', -1), '%Y-%m-%d') AS last_date,
    ...
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  5. #5
    -André- -André- ist offline Mitglied Gold
    Registriert seit
    Jul 2006
    Beiträge
    115
    Danke für die schnelle Antwort,

    wenn ich mit SUBSTRING_INDEX arbeite schneide ich ja einfach vorne bzw. hinten einen Teil aus dem String heraus. Gibt es eine Möglichkeit, dass ich herausfinde, wie viele Einträge in dem JSON Array stehen?

    Gruß

    -André-
     

  6. #6
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Jepp, gibt es

    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    
    ...
        CASE IFNULL(LENGTH(date_list), 0) WHEN 0    
            -- Bei der Länge NULL oder 0 ist kein Datum vorhanden       
            THEN 0
            -- Anzahl Kommas zählen indem ich die Länge des String mit und ohne Kommas vergleiche und 1 dazuzählen
            ELSE LENGTH(date_list)-LENGTH(REPLACE(date_list, ',', '')) +1
        END AS cnt_dates,
    ...
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  7. #7
    -André- -André- ist offline Mitglied Gold
    Registriert seit
    Jul 2006
    Beiträge
    115
    Vielen Dank für die Antwort.


    Gruß

    -André-
     

Ähnliche Themen

  1. Daten aus MySQL via JSON übertragen
    Von Spelvin im Forum Javascript & Ajax
    Antworten: 26
    Letzter Beitrag: 25.08.11, 17:50
  2. Daten mit PHP auslesen (JSON?) und mit JS weiterbearbeiten
    Von unimail im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 16.07.11, 13:33
  3. Antworten: 7
    Letzter Beitrag: 03.07.11, 16:51
  4. Daten aus MYSQL DB mit Excel bearbeiten?!
    Von medico im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 05.09.05, 15:24
  5. MySQL - Daten bearbeiten
    Von JDietrich im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 12.07.04, 19:05