Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
477 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Resolvu] Sqlite - Regrouper plusieurs lignes

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolvu] Sqlite - Regrouper plusieurs lignes

n°2245814
gougoul07
Bo comme un dieu
Posté le 11-12-2014 à 20:24:45  profilanswer
 

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é.
mood
Publicité
Posté le 11-12-2014 à 20:24:45  profilanswer
 

n°2245831
Yonel
Monde de merde !
Posté le 12-12-2014 à 03:36:43  profilanswer
 

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
n°2245854
gougoul07
Bo comme un dieu
Posté le 12-12-2014 à 11:22:07  profilanswer
 

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é.
n°2245856
gougoul07
Bo comme un dieu
Posté le 12-12-2014 à 11:52:32  profilanswer
 

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é.
n°2245883
Yonel
Monde de merde !
Posté le 12-12-2014 à 14:12:15  profilanswer
 

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.

n°2245891
gougoul07
Bo comme un dieu
Posté le 12-12-2014 à 14:39:12  profilanswer
 

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é.
n°2245893
Yonel
Monde de merde !
Posté le 12-12-2014 à 14:52:01  profilanswer
 

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

n°2245919
gougoul07
Bo comme un dieu
Posté le 12-12-2014 à 16:43:18  profilanswer
 

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


---------------
Mieux vaut apprendre à un homme à pêcher avant de l'avoir tué.
n°2245930
Yonel
Monde de merde !
Posté le 12-12-2014 à 17:52:04  profilanswer
 

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.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [Resolvu] Sqlite - Regrouper plusieurs lignes

 

Sujets relatifs
incorporer plusieurs variables dans du code pythonMacro VBA Powerpoint - Suppression de plusieurs slides
Macro VBA Powerpoint pour supprimer plusieurs liens sélectionnés[Excel][VBA] Ajouter plusieurs séries à un plot nb données variables
[Excel VBA] rech cellule comportant plusieurs chaines de caractèreSite en plusieurs langues : URL unique ou sous-domaines ?
Inversion lignes de .txt par blocsRépartir une colonne sur plusieurs colonnes
rafraichir plusieurs images en meme temps[RESOLU] [POWERSHELL] Briser lignes de codes
Plus de sujets relatifs à : [Resolvu] Sqlite - Regrouper plusieurs lignes


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR