Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/10/2007, 12h49   #1
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2007
Messages : 143
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 143
Points : 35
Points : 35
Par défaut Suppression de lignes

Bonjour,

alors voila, j'ai cherché sur le net mais j'ai rien trouvé donc j'en appel a vous

En fait, dans ma table mysql, j'insere des données. une des donnée est un id de catégories. La catégorie et choisie en fonction d'un matching avec des mots clés. Donc en fait, ca peux m'insérer plusieurs fois la même ligne, seule la catégorie change. Sauf que parfois, l'id 0 est inséré.

En fait, je voudrais supprimer les lignes ou l'ID = 0 mais seulement la ou il y a deja au moins un id de renseigné pour la meme annonce. Car parfois, il n'y a qu'une ligne d'inséré et la catégorie est 0.

Merci
Mehdib92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 14h23   #2
Membre éprouvé
 
Avatar de nounetmasque
 
Inscription : janvier 2003
Messages : 491
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 491
Points : 488
Points : 488
bah c un peu vaste comme explication, pourrais-tu nous donner la structure de la table car on ne sait pas comment identifier les annonces !
__________________
"Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."
nounetmasque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 14h34   #3
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2007
Messages : 143
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 143
Points : 35
Points : 35
chaque annonce a :

- un n° d'offre. ne numéro dépends de la ligne où se site les donnée sur le fichier CSV (car en fait j'importe depusi un CSV)
- un titre
- un ID de catégorie. Pour cela, il y a un matching de mots-clé avec une table dans ma BDD.
Mehdib92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 14h40   #4
Membre éprouvé
 
Avatar de nounetmasque
 
Inscription : janvier 2003
Messages : 491
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 491
Points : 488
Points : 488
comment peux-tu identifier de manière unique une annonce avec ces données ?
__________________
"Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."
nounetmasque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 14h42   #5
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2007
Messages : 143
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 143
Points : 35
Points : 35
ah oui pardon chaque annonce a un autre ID qui s'auto incrémente. Mais c'est tout ce que j'ai.
Mehdib92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 14h47   #6
Membre éprouvé
 
Avatar de nounetmasque
 
Inscription : janvier 2003
Messages : 491
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 491
Points : 488
Points : 488
Je ne suis pas certain que cette syntaxe fonctionne car elle fait appel à la même table dans un ordre DELETE :
Code :
1
2
3
4
 
DELETE tTable t1
WHERE t1.idCat = 0
AND t1.idAn IN (SELECT t2.idAn FROM tTable t2 WHERE t2.idCat != 0)
__________________
"Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."
nounetmasque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 15h02   #7
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2007
Messages : 143
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 143
Points : 35
Points : 35
tout bete mais je vois pas quoi choisir comme table t2 ?
Mehdib92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 15h38   #8
Membre éprouvé
 
Avatar de nounetmasque
 
Inscription : janvier 2003
Messages : 491
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 491
Points : 488
Points : 488
Il aurait du falloir prendre la même table t1 et t2 mais justement cette syntaxe ne fonctionne pas avec un ordre DELETE.
Perso je ne vois pas trop comment faire en une seule requette
__________________
"Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."
nounetmasque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 15h51   #9
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2007
Messages : 143
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 143
Points : 35
Points : 35
parce que même à l'insertion je ne voit pas comment ne pas insérer les 0 quand il y a deja un Id d'insérer.

Pour le moment, j'insert toutes les annoncers avec un ID à 0 puis ensuite je fait un UPDATE sur la base.
Mehdib92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 16h06   #10
Membre éprouvé
 
Avatar de nounetmasque
 
Inscription : janvier 2003
Messages : 491
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 491
Points : 488
Points : 488
Ca change tout. Détail un peu ta procédure d'insertion ainsi que les tables utilisées stp.
__________________
"Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."
nounetmasque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 16h25   #11
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2007
Messages : 143
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 143
Points : 35
Points : 35
Voici ma procédure :

Code :
1
2
3
4
5
6
7
8
//Insertion de toutes les annonces avec un id à 0
mysql_query("INSERT INTO `emb_advertisement` (`offer_id`, `adv_title`, `cty_id`) VALUES ('$row', '$titre', '0')");
 
		IF($res['id'] != FALSE) //Execute la commande si il y a un résultat
			{
			// Insertion dans la base du n° d'annonce, du titre et de la catégorie
			mysql_query("UPDATE emb_advertisement SET cty_id='$id_categorie' WHERE adv_title='$titre'");
			}
Mehdib92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 17h02   #12
Membre éprouvé
 
Avatar de nounetmasque
 
Inscription : janvier 2003
Messages : 491
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 491
Points : 488
Points : 488
Si je comprends bien, tu insères une annonce en initialisant sa catégorie à 0 et en fonction d'un test tu l'updates.
Le test correspondant à quoi ?

Si tu veux de l'aide, soit un peu plus précis stp !
__________________
"Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."
nounetmasque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 17h13   #13
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2007
Messages : 143
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 143
Points : 35
Points : 35
désolé de ne pas torp expliqué mais c'est qu'en fait je sais pas trop quoi expliquer.

C'est exactement ca pour l'initialisation.

Je t'explique le test :

Le titre est divisé mot par mot.

chaque mot est comparé à une liste de mots clés dans une base.
chaque catégorie est associé à une liste de mots clés.

Lorsque le mot match avec un mot clé, ce mot est attribué à la catégorie où est contenu le mot clé.

Ainsi, je peux avoir plusieurs catégories par mot clé.

Voila.
Mehdib92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 17h19   #14
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2007
Messages : 143
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 143
Points : 35
Points : 35
j'ai penser à un test mais je ne sais pas comment l'écrire en entier :

DELETE FROM emb_advertisement WHERE cty_id = '0' AND ...

après le AND, je voudrais mettre :

SI l'annonce (donc le titre ou l'id de l'offre) contient plus d'une ligne.
Mehdib92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2007, 10h23   #15
Membre éprouvé
 
Avatar de nounetmasque
 
Inscription : janvier 2003
Messages : 491
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 491
Points : 488
Points : 488
Pourrais-tu poster ta requette qui te permet d'associer une catégorie à un titre stp ?
__________________
"Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."
nounetmasque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2007, 10h02   #16
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2007
Messages : 143
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 143
Points : 35
Points : 35
Voila le script :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
foreach($mots AS $keyword)
	{
		// Passe chaque mot en minuscule
		$keyword = strtolower($keyword);
		// supprimer les caratères accentués 
		$keyword = strtr($keyword,  "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",  "aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");
		// supprimer les '
		$keyword = strtr($keyword, "'", " ");
		// Verifie si un des mots du titre ne fait pas partie de la liste de mots à exclure
		$sql_mots = mysql_query("SELECT * FROM `mots_out` WHERE `mots_out` LIKE '%" . $keyword . "%'") or die ("Erreur dans la requête des mots à exclure.");
		$res_mots = mysql_fetch_array($sql_mots);
		// Si le mot fait partie de la liste, ne pas le prendre en compte
		if($res_mots['mots_out'] != TRUE )
		{
		$sql = mysql_query("SELECT * FROM `categories` WHERE `keywords` LIKE '%" . $keyword ."%'") or die ("Erreur dans la requête");
		$res = mysql_fetch_array($sql);
 
		$id_categorie = $res['id'];
 
		if($res['id'] != FALSE)
			{
			// Insertion dans la base du n° d'annonce, du titre et de la catégorie
			mysql_query("INSERT INTO `emb_advertisement` (`offer_id`, `adv_title`, `cty_id`) VALUES ('$row', '$titre', '$id_categorie')");
			}
		}
	}
Mehdib92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/10/2007, 09h37   #17
Membre éprouvé
 
Avatar de nounetmasque
 
Inscription : janvier 2003
Messages : 491
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 491
Points : 488
Points : 488
Désolé de repondre si tard.
Je ne trouve pas de réponse élégante à ton problème et je te propose de compléter ta boucle PHP avec ces deux instructions (en pseudo-code) :
Code :
1
2
3
4
5
 
IF($id_categorie == 0){
   --sélectionner le nombre d'annonce dont idCat != 0 pour les annonces correspondant à celle insérée précedement
   --si le nombre > 0 alors supprimer les annonces dont idCat == 0 pour les annonces correspondant à celle insérée précedement				
}
J'espère que ça t'aidera un minimum.
__________________
"Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."
nounetmasque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/10/2007, 17h05   #18
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2007
Messages : 143
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 143
Points : 35
Points : 35
désolé de répondre si tard, je m'étais penché sur autre chose.

bah je test ca ce soir j'essai de traduire ca en code et jte dit ca. par contre, pour être sur du truc, où me conseilles-tu de placer ca dans le script
Mehdib92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/10/2007, 17h09   #19
Membre éprouvé
 
Avatar de nounetmasque
 
Inscription : janvier 2003
Messages : 491
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 491
Points : 488
Points : 488
Je te conseil de mettre ça juste après l'insertion de données dans ta base.
__________________
"Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."
nounetmasque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2007, 10h08   #20
Nouveau Membre du Club
 
Étudiant
Inscription : mai 2007
Messages : 143
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : mai 2007
Messages : 143
Points : 35
Points : 35
je ne comprends pas le IF($id_categorie == 0)

enfin si je le comprends mais je comprends pas pourquoi mettre ca.
Mehdib92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h25.


 
 
 
 
Partenaires

Hébergement Web