Requête d'export de données Mysql vers fichier CSV

Requête d'export de données Mysql vers fichier CSV - SQL/NoSQL - Programmation

Marsh Posté le 27-05-2011 à 11:51:57    

Bonjour à tous,
 
J'ai une base de données Mysql pour mon site.
J'extrais déjà les données de cette base produits pour constituer un fichier catalogue CSV.
 
Mes fiches produits ont une photo principale, dont l'url est reprise dans la table products, mais elles ont également des photos secondes qui sont contenues dans la table products_image
 
Je souhaiterais que ma requête reprenne également les url de ces photos pour les inclure dans mon fichier csv mais je ne sais comment faire...
 
La table d'image se compose ainsi:
ID
product_id
nom de l'image
 
et ma requête actuelle est du type:  Select * from products.
Comment inclure correctement d'ajouter toutes les urls des photos secondaires SACHANT que tout produit n'a pas forcément d'image secondaire et que le nombre peut donc varier de 0 à 10.
 
Merci!  :hello:

Reply

Marsh Posté le 27-05-2011 à 11:51:57   

Reply

Marsh Posté le 27-05-2011 à 15:03:46    

1) requête sql pour récupérer les produits
2) pour chaque produit, tu fais une requête qui récupère les images secondaires et tu les mets à la fin de la ligne dans le csv. Si y'a moins que 10 images, tu complètes avec des colonnes à vide.
3) enregistrement des données dans le fichier csv.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 27-05-2011 à 15:30:06    

Point 1 ok
point 3 ok
Par contre le point 2 :heink:  Je dois bien vous avouer ne pas parvenir à savoir par où commencer!

Reply

Marsh Posté le 27-05-2011 à 15:42:28    

ben une boucle :/

Code :
  1. $resultaReqSql = fonction qui récupère les produits via sql
  2. Pour chaque entrée dans la var $resultaReqSql faire
  3. {
  4.     $ResultatReqSqlImages = fct qui récupère les images du produit courant via sql
  5.      générée la ligne csv avec les infos sur produit (dans $resultaReqSql)
  6.      compléter la ligne csv avec les images récupérées dans $ResultatReqSqlImages
  7.      Si nb images dans $ResultatReqSqlImages < 10)
  8.      {
  9.          compléter la ligne csv avec [10 - nb images] colonnes (champs vides)
  10.      }
  11.      enregistrer la ligne csv dans le fichier
  12. }


 
Perso, j'ai tendance à bufferiser dans un tableau les lignes csv et à écrire d'un coup tout le tableau au format csv dans le fichier.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 27-05-2011 à 15:47:56    

SELECT products.products_model, products_images.products_images FROM products INNER JOIN products_images ON products.products_id=products_images.products_id WHERE 1
 
Ceci me sort une ligne complète par image au lieu de me mettre toutes les images d'un même produit sur une ligne avec le reste des renseignements :/

Reply

Marsh Posté le 27-05-2011 à 15:48:39    

Heuu, j'aurais dû prévenir que je me suis arrêté après une année de programmation.
J'étais un crack en C :lol:

Reply

Marsh Posté le 27-05-2011 à 15:56:36    

Bennyb666 a écrit :

SELECT products.products_model, products_images.products_images FROM products INNER JOIN products_images ON products.products_id=products_images.products_id WHERE 1
 
Ceci me sort une ligne complète par image au lieu de me mettre toutes les images d'un même produit sur une ligne avec le reste des renseignements :/


 
C'est une solution mais je te l'ai pas proposée car ça va pas être très pratique pour avoir qu'une ligne par produit dans ton csv (mais on peut y arriver quand même). Ma méthode est plus pratique mais fait exécuter plus de requêtes sql.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 27-05-2011 à 15:57:30    

Bennyb666 a écrit :

Heuu, j'aurais dû prévenir que je me suis arrêté après une année de programmation.
J'étais un crack en C :lol:


 
Le sql doit pas être ton fort non plus plus vue le "WHERE 1" à la fin de ta requête :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 27-05-2011 à 16:26:36    

C'est phpmyadmin qui rajoute ça automatiquement. Comme ça ne gêne pas, je l'ai laissé :D

Reply

Marsh Posté le 27-05-2011 à 16:28:06    

En SQL Server tu peux faire ca pour arriver a ce que tu veux (avant de le transformer en csv)

Code :
  1. SELECT a.products_model
  2.        , MAX(CASE WHEN a.seq = 1 THEN a.products_images ELSE NULL END) IMG1
  3.        , MAX(CASE WHEN a.seq = 2 THEN a.products_images ELSE NULL END) IMG2
  4.        , MAX(CASE WHEN a.seq = 3 THEN a.products_images ELSE NULL END) IMG3
  5.        , MAX(CASE WHEN a.seq = 4 THEN a.products_images ELSE NULL END) IMG4
  6.        , MAX(CASE WHEN a.seq = 5 THEN a.products_images ELSE NULL END) IMG5
  7.        , MAX(CASE WHEN a.seq = 6 THEN a.products_images ELSE NULL END) IMG6
  8.        , MAX(CASE WHEN a.seq = 7 THEN a.products_images ELSE NULL END) IMG7
  9.        , MAX(CASE WHEN a.seq = 8 THEN a.products_images ELSE NULL END) IMG8
  10.        , MAX(CASE WHEN a.seq = 9 THEN a.products_images ELSE NULL END) IMG9
  11.        , MAX(CASE WHEN a.seq = 10 THEN a.products_images ELSE NULL END) IMG10
  12. FROM (
  13.     SELECT products.products_model
  14.            , products_images.products_images
  15.            , ROW_NUMBER() OVER (PARTITION BY products.products_model ORDER BY products.products_model) seq
  16.     FROM products
  17.         JOIN products_images ON products.products_id=products_images.products_id
  18.     ) a    
  19. GROUP BY a.products_model


 
Edit: pff c'est vendredi...


Message édité par Oliiii le 27-05-2011 à 16:31:19
Reply

Sujets relatifs:

Leave a Replay

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