Sqlite - Regrouper plusieurs lignes [Resolvu] - SQL/NoSQL - Programmation
Marsh Posté le 12-12-2014 à 03:36:43
Enorme problème de structure dans cette base.
Normalement on crée la table avec plusieurs champs : id / prenom / nom / ads / cp. Chaque champ contient la valeur en question.
J'ai déjà eu ce genre de tables (value + data) à gérer: c'était un cauchemar. Enfin dans mon cas le cauchemar c'est surtout que TOUTE la base était comme ça.
Donc:
1) Si tu as la possibilité de changer la structure, fais le immédiatement. Sinon tu vas perdre beaucoup de cheveux dans l'histoire...
2) Si tu l'as pas, tu peux t'en sortir avec du SQL moche du genre SELECT (SELECT data FROM table_pourrie WHERE value = "12-Prenom" ) As id, (SELECT data FROM table_pourrie WHERE value = "12-nom" ), ... FROM dual.
Je te souhaite d'être dans le cas 1).
Marsh Posté le 12-12-2014 à 11:22:07
merci de ta reponse
impossible de changer la structure de la base, je passe par l'intermédiaire d'un système qui ne me permet d'enregistrer que deux champs
c'est donc le seule moyen que j'ai trouvé pour enregistrer toutes ces données.
C'est bien pour ça que je la transforme en une base un peu plus correct.
ta réponse me fait remonter quelques souvenirs mais il me faut une requête qui me transforme toute cette base en une base correcte en un coup.
L'exemple que tu as donné est unitaire.
je vais voir si je peux faire un tuc du genre
select substr(data,1,2) as id, (select data from table_pourrie WHERE value =( id +"-nom" )) as nom, (select data from table_pourrie WHERE value =( id +"-prenom" ) as prenom) ...
Marsh Posté le 12-12-2014 à 11:52:32
j'ai testé ca :
select distinct substr(data,1,2) ad "id",
(select data from table_pourrie WHERE value =( substr(data,1,2) || "-nom" )) as "nom",
(select data from table_pourrie WHERE value =( substr(data,1,2) || "-prenom" ) as "prenom"
from table_pourrie;
j'ai bien un resultat avec tous les id, et la première ligne correcte pour nom et prenom
mais toutes les lignes suivants ont le même nom et prénom, le where n'est pas réévalué a chaque ligne
Marsh Posté le 12-12-2014 à 14:12:15
gougoul07 a écrit : |
Tu peux en dire plus ? Qu'est-ce qui te force à enregister uniquement deux champs, j'ai du mal à voir ce que ça peut être...
Toute la mocheté de cette structure, c'est que quoi tu fasses tu n'as AUCUN moyen de rendre la requête élégante et facile à faire (alors qu'il s'agit de quelque chose de très basique au départ). Et je ne parle pas des perfs qui vont être très mauvaises.
Marsh Posté le 12-12-2014 à 14:39:12
pour ta première question : c'est très simple javascript avec greasemonkey, impossible d’accéder au filesystem
heureusement qu'il y a aux moins cette possibilité d’écrire dans une base sql, et avec les limites de 2 champs dont l'un unique ...
je capture des résultats de logs, et j'ai besoin de les exploiter, sachant que le seul moyen que j'ai c'est de récupérer ces données
dans un tableau, dans une page html, pas possible de les avoir autrement, ni de demander une mise en page.
pour le coté perf, je m'en fous, car vu le volume a traiter ça ne rentre pas en ligne de compte, mais j'ai besoin de pouvoir
traiter ces données d'ou ma demande pour les exporter dans un format "normal" et que la requête soit élégante ou pas,
du moment que j'ai mes datas a traiter ...
Marsh Posté le 12-12-2014 à 14:52:01
En fait dans mon premier message c'était juste un exemple, évidemment qu'il faut revoir un peu la requête.
Tu dois pouvoir faire un truc du genre :
Code :
|
Résultat :
Code :
|
Marsh Posté le 12-12-2014 à 16:43:18
superbe !
exactement ce que je voulais, quelques millions de merci
Marsh Posté le 12-12-2014 à 17:52:04
Cool !
J'imagine que tu n'es pas dans ce cas là puisque tu parles d'un petit jeu de données. Mais je mets un lien vers une histoire en anglais que j'aime beaucoup :
https://www.simple-talk.com/opinion [...] bad-carma/
Pour résumer : l'auteur explique comment une boîte a coulé en perdant des millions de dollars à cause d'une appli basée sur une table clé/valeur dans les années 90.
C'est pas pour toi personnellement, je poste le lien qui fera peut-être réfléchir les développeurs du forum.
Marsh Posté le 11-12-2014 à 20:24:45
yo a tous
Ca fait quelques années que je n'ai pas fait de sql et je n'ai plus les bons réflexes ...
si vous pouviez me donner une piste pour mon pb
j'ai une table qui ressemble a un truc de ce genre
deux colonnes
value data
12-Prenom Jean
12-nom Aymarre
12-ads chez lui
12-cp 75049
15-nom Pierre
etc
le numéro est unique
j'aimerais avoir en résultat de ma requête
5 colonnes
id prenom nom ads cp
12 Jean Aymarre chez lui 75049
15 Pierre
etc
merci de votre aide
Message édité par gougoul07 le 12-12-2014 à 16:44:07
---------------
Mieux vaut apprendre à un homme à pêcher avant de l'avoir tué.