Page 1 sur 1

insérer des données dans la BDD

Posté : 20 avr. 2010, 09:51
par stomper98
Bonjour,

Je souhaite réorganiser la BDD d'un site automobile afin que la recherche d'un véhicule soit plus agréable pour les visiteurs.
Je reçois le stock sous forme de txt/csv, (une ligne par véhicule) que j'insère ensuite dans la BDD. (Marque;Modele;...)

Mon problème se situe au niveau des modèles. Voici un exemple, je reçois comme véhicule "308" et "308 HDI", j'aimerais n'avoir que des 308 ceci afin d'éviter d'avoir une multitude de modèles.
Il y a une certainement une méthode pour avoir une correspondance avec les modèles existant

Ne connaissant pas le terme exact de cette méthode, je rencontre quelques difficultés dans ma recherche. :?

Re: insérer des données dans la BDD

Posté : 20 avr. 2010, 14:50
par Aureusms
Dans ta recherche de base de données ou dans ta recherche de fichier csv ?
Sinon si tu fais un :
SELECT * FROM table WHERE nom_modele = '308'
tu auras que les 308.

Si tu fais un :
SELECT * FROM table WHERE nom_modele like '%308%'
Tu auras tous les modèles ou il y aura 308 dedans (genre : 308 HDI, 2308, A308, 308KK, ...);

Si tu veux que cela ne commence que par 308 :
SELECT * FROM table WHERE nom_modele like '308%'

Re: insérer des données dans la BDD

Posté : 20 avr. 2010, 15:45
par stomper98
Merci de ta réponse.

Je n'ai pas été très claire je pense. J'aimerais régler ce problème au moment de l'insertion des véhicules dans la BDD

Actuellement dès qu'il y a un nouveau modèle (ex: 308 HDI, Scénic TDI ...) il est automatiquement ajouté. (voir code ci-dessous)
//ajout modele $carac[x]  étant les variables du fichier txt
$requete = "SELECT ID_MODELE FROM modele WHERE LIBELLE_MODELE = '".addslashes($carac[3])."'";
$connex->query($requete);
$connex->next_record();
if ($connex->num_rows() == 0){			    
	//On insère dans la base de données la marque correspondante
	$requete = "INSERT INTO modele (LIBELLE_MODELE, ID_MARQUE) VALUES ('".addslashes($carac[3])."', ".$idMarque.")";
	$connex->query($requete);
	//le modele est inséré il faut maitenant récupé&rer son ID					
        $requete = "SELECT ID_MODELE FROM modele WHERE LIBELLE_MODELE = '".addslashes($carac[3])."'";
	$connex->query($requete);
	$connex->next_record();	
} else {
	$idModele = $connex->f("ID_MODELE");
}
Ce que je ne souhaite plus justement. Sinon je me retrouve avec un beaucoup trop de modèle. J'ai défini une liste de modèles, ma question est comment faire pour qu'il n'ajoute pas les modèles ...d'où ma question sur les "tables de correspondances" ... ex : Scénic HDI = Scénic et Grand Scénic Confort = Grand Scénic (Scénic et Grand Scénic étant des modèles défini)

En fait cette question est valable pour chaque modèle de l'ensemble des marques, en espérant que ce soit plus claire. :)

Re: insérer des données dans la BDD

Posté : 20 avr. 2010, 20:52
par AB
Non c'est pas vraiment plus clair #-o

Primo on ne connait pas la structure de ta table.
Secondo je ne vois pas bien si tu veux un conseil pour ta requête ou si c'est un conseil au niveau de l'organisation de la structure de tes tables.

Re: insérer des données dans la BDD

Posté : 21 avr. 2010, 08:57
par Aureusms
Ecoutes pas AB il fait jamais d'efforts :D
En fait, de ce que je comprends, tu veux faire une ségrégation des modèles lors de l'insertion. La première chose qui me vient à l'esprit => tableau référent.

Avant de faire cette requête
$requete = "INSERT INTO modele (LIBELLE_MODELE, ID_MARQUE) VALUES ('".addslashes($carac[3])."', ".$idMarque.")";
Tu veux voir si le modèle $carac[3] est vraiment nécessaire dans la base de données ?
Aussi tu dois faire un test avant de faire
$connex->query($requete);
ex.
<?php
$tableau_modele_inserable = array ("308", "Scénic");
//ajout modele $carac[x]  étant les variables du fichier txt
$requete = "SELECT ID_MODELE FROM modele WHERE LIBELLE_MODELE = '".addslashes($carac[3])."'";
$connex->query($requete);
$connex->next_record();
if ($connex->num_rows() == 0){                     
        //On insère dans la base de données la marque correspondante
        $requete = "INSERT INTO modele (LIBELLE_MODELE, ID_MARQUE) VALUES ('".addslashes($carac[3])."', ".$idMarque.")";
        if (in_array($carac[3],$tableau_modele_inserable)
        {
              $connex->query($requete);
              //le modele est inséré il faut maitenant récupé&rer son ID                                 
              $requete = "SELECT ID_MODELE FROM modele WHERE LIBELLE_MODELE = '".addslashes($carac[3])."'";
              $connex->query($requete);
        }
        // j'ai un petit doute avec la ligne dessous si elle doit ou pas être dans l'accolade
              $connex->next_record();
} else {

Re: insérer des données dans la BDD

Posté : 21 avr. 2010, 10:02
par stomper98
Alors j'ai 2 questions par rapport à ta solution.

ce code
$tableau_modele_inserable = array ("308", "Scénic");
et celui ci n'ont pas la même utilité ?
// Ici je vérifie si le $carac[3] (le modèle) est présent dans la table modèle
$requete = "SELECT ID_MODELE FROM modele WHERE LIBELLE_MODELE = '".addslashes($carac[3])."'";
$connex->query($requete);
Que va t-il se passer pour un modèle de ce type ex : $carac[3] = "308 Essence" (modèle non présent dans la BDD, mais que je souhaite intégrer en tant que 308)

Pour répondre à AB:

Voici la structure des tables :

table Vehicule
-id_vehicule
- marque (=id_marque)
- modele (=id_modele)

table Marque
-id_marque
- libelle_marque

table Modele
-id_modele
-id_marque
- libelle_modele

Moi même je ne sais pas si je dois régler ce problème au niveau de la requête ou au niveau de la BDD. #-o