ERLEDIGT
JA
JA
ANTWORTEN
6
6
ZUGRIFFE
525
525
EMPFEHLEN
-
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é-
-
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
-
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é-
-
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
-
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é-
-
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
-
Vielen Dank für die Antwort.
Gruß
-André-
Ähnliche Themen
-
Daten aus MySQL via JSON übertragen
Von Spelvin im Forum Javascript & AjaxAntworten: 26Letzter Beitrag: 25.08.11, 17:50 -
Daten mit PHP auslesen (JSON?) und mit JS weiterbearbeiten
Von unimail im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 16.07.11, 13:33 -
MySQL Daten über PHP-Formular bearbeiten
Von Jacy im Forum PHPAntworten: 7Letzter Beitrag: 03.07.11, 16:51 -
Daten aus MYSQL DB mit Excel bearbeiten?!
Von medico im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 05.09.05, 15:24 -
MySQL - Daten bearbeiten
Von JDietrich im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 12.07.04, 19:05





Zitieren

Login





