[Resolvu] Sqlite - Regrouper plusieurs lignes

Sqlite - Regrouper plusieurs lignes [Resolvu] - SQL/NoSQL - Programmation

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é.
Reply

Marsh Posté le 11-12-2014 à 20:24:45   

Reply

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).


Message édité par Yonel le 12-12-2014 à 07:04:57
Reply

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) ...


---------------
Mieux vaut apprendre à un homme à pêcher avant de l'avoir tué.
Reply

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


---------------
Mieux vaut apprendre à un homme à pêcher avant de l'avoir tué.
Reply

Marsh Posté le 12-12-2014 à 14:12:15    

gougoul07 a écrit :


 
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.
 


 
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.

Reply

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 ...


---------------
Mieux vaut apprendre à un homme à pêcher avant de l'avoir tué.
Reply

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 :
  1. SELECT
  2.     ids.id,
  3.     (SELECT data FROM table_pourrie
  4.      WHERE value =
  5.      ids.id || "-prenom" ) As prenom,
  6.     (SELECT data FROM table_pourrie
  7.      WHERE value =
  8.      ids.id || "-nom" ) As nom,
  9.     (SELECT data FROM table_pourrie
  10.      WHERE value =
  11.      ids.id || "-adr" ) As adr,
  12.     (SELECT data FROM table_pourrie
  13.      WHERE value =
  14.      ids.id || "-cp" ) As cp
  15. FROM (select distinct substr(value,1,2) As id FROM table_pourrie) ids


 
Résultat :
 

Code :
  1. id  prenom  nom          adr                                                       cp
  2. 12  Jean    Aymarre      chez lui                                                  75049
  3. 15  Au      Secours      La structure de cette table est lamentable                666

Reply

Marsh Posté le 12-12-2014 à 16:43:18    

superbe !
 
exactement ce que je voulais, quelques millions de merci ;)


---------------
Mieux vaut apprendre à un homme à pêcher avant de l'avoir tué.
Reply

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed