2010-01-26 3 views
0

Hey et CBM mecs intelligents ensemble. J'ai une question pour vous. Nous utilisons MySQL VIEWs pour formater nos données en JSON quand il est retourné (en tant que BLOB), ce qui est pratique (mais pas particulièrement agréable sur les performances, mais nous le savons déjà).JSON VIEW en utilisant la question GROUP_CONCAT

Mais, je ne peux pas sembler obtenir une requête particulière de travail en ce moment (chaque ligne contient NULL quand il doit contenir un objet JSON créé avec les valeurs de multiples JOIN).

Voici l'idée générale:

SELECT CONCAT(
    "{", 
    "\"some_list\":[", GROUP_CONCAT(DISTINCT t1.id), "],", 
    "\"other_list\":[", GROUP_CONCAT(DISTINCT t2.id), "],", 
    "}" 
) cool_json 

FROM table_name tn 

INNER JOIN (some_table st) ON st.some_id = tn.id 

LEFT JOIN (another_table at, another_one ao, used_multiple_times t1 ) 
ON st.id = at.some_id AND 
    at.different_id = ao.different_id AND 
    ao.different_id = t1.id 

LEFT JOIN (another_table2 at2, another_one2 ao2, used_multiple_times t2 ) 
ON st.id = at2.some_id AND 
    at2.different_id = ao2.different_id AND 
    ao2.different_id = t2.id 

GROUP BY tn.id ORDER BY tn.name 

Tout le monde connaît le problème ici? Ai-je manqué quelque chose que je devrais regrouper? Cela fonctionnait quand je ne faisais que 1 LEFT JOIN & GROUP_CONCAT, mais maintenant avec plusieurs JOINs/GROUP_CONCATs ça gâche. Lorsque je déplace les GROUP_CONCAT du champ "cool_json", ils fonctionnent comme prévu, mais je souhaite que mes données soient formatées en JSON afin que je puisse les décoder côté serveur ou client en une seule étape.

+0

Avez-vous essayé d'exécuter cette requête directement dans la base de données. Avez-vous des avertissements dans la sortie à propos de group_concat? group_concat peut facilement atteindre sa limite naturelle de 1024 caractères. (Qui peut être augmentée) – MindStalker

+0

je l'ai déjà 'set group_concat_max_len global = 8192;' (ce qui est suffisant), mais même quand cela arrive, il coupe juste à côté du texte (je n'obtenir 'null'). bonne estimation, cependant, qui a été la question avant (déconner mon JSON) –

+0

en double possible de [Comment créer le format JSON avec le groupe-concat MySQL?] (http://stackoverflow.com/questions/12511933/how-create- JSON format avec groupe-concat-mysql) – e4c5

Répondre

0

Je l'ai testé certains de cela et ne trouve aucune faute.

Essayez de créer une vue comme

CREATE VIEW tn_view AS 
SELECT tn.id, tn.name, t1.id, t2.id 

FROM table_name tn 

INNER JOIN (some_table st) ON st.some_id = tn.id 

LEFT JOIN (another_table at, another_one ao, used_multiple_times t1 ) 
ON st.id = at.some_id AND 
    at.different_id = ao.different_id AND 
    ao.different_id = t1.id 

LEFT JOIN (another_table2 at2, another_one2 ao2, used_multiple_times t2 ) 
ON st.id = at2.some_id AND 
    at2.different_id = ao2.different_id AND 
    ao2.different_id = t2.id 

ALORS

SELECT CONCAT(
    "{", 
    "\"some_list\":[", GROUP_CONCAT(DISTINCT t1.id), "],", 
    "\"other_list\":[", GROUP_CONCAT(DISTINCT t2.id), "],", 
    "}" 
) cool_json 
FROM tn_view 
GROUP BY id ORDER BY name 
+0

oui, faire une vue et ensuite saisir les données travailleraient, mais je voudrais le faire tout en ligne (nous avons déjà trop de points de vue qui traînent). –