Page 1 sur 1
Supprimer une donnée de la base sans indice
Posté : 29 juin 2005, 12:09
par guilt92
Bonjour,
En fait je suis confronté au cas suivant :
je récupère depuis une base un certain nombre de valeurs selon des critères. Par exemple disons que je récupère 5 lignes.
J'ai une variable $i qui me dit quel enregistrement je dois supprimer, par exemple le 3ème enregistrement.
Ainsi en faisant plusieurs fois le fetch_array j'arrive a visualiser la bonne ligne, mais je ne sais pas comment faire pour supprimer uniquement cette entrée la sachant qu'elle ne comporte pas d'index particulier.
Merci d avance, j espere pouvoir etre compris !

Posté : 29 juin 2005, 12:15
par Augure
Tes 5 lignes sont strictement identiques ?
Il y a surement une colonne (ou des colonnes) qui permet de distinguer les lignes les unes des autres. (Si tel n'est pas le cas, ta base a probablement une erreur de conception)
Dans ce cas
DELETE FROM MaTable
WHERE col_avec_idx = ...
AND col_sans_idx_qui_les distinguent = ...
Pas besoins que la colonne soit indéxé pour l'utiliser dans la clause WHERE.
Donc n'utilise pas le numéro de la ligne dans ton curseur pour la suppression mais la valeur d'une colonne discréminente.
Posté : 29 juin 2005, 12:18
par guilt92
oui si je compare toutes les valeurs je dois pouvoir trouver la bonne ligne mais n existe t il pas une fonction pour supprimer dans la base selon l'index après un tri par exemple ?
Posté : 29 juin 2005, 12:27
par Augure
Je ne sais pas s'il existe une fonction PHP pour cela. Mais si une telle fonction existe on ne pourra pas garantir que la bonne ligne soit supprimée. (exemple une seconde personne rajoute ou supprime une ligne entre le moment ou tu les visualises et tu lances l'ordre de suppression)
Franchement je te conseille d'utiliser la solition que je te suggére. Raméne dans ton ordre SELECT une colonne descrimante que tu n'affiches pas et utilise la pour l'ordre de suppression.
Posté : 29 juin 2005, 12:49
par ouckileou
il n'y a vraiment pas moyen de modifier la table ?
sinon tu rajoutes une colonne identifiant, tu la remplis et comme ça tu auras un identifiant
Posté : 29 juin 2005, 13:01
par fggdm
Salut,
C'est quoi la base de données ?
Posté : 29 juin 2005, 13:38
par guilt92
(exemple une seconde personne rajoute ou supprime une ligne entre le moment ou tu les visualises et tu lances l'ordre de suppression)
Je reconnais que je n'avais pas pensé à cela et que donc il est plus sur d'identifier tous les champs pour faire un WHERE avec des AND sur chaque parametre...
C'est quoi la base de données ?
C'est une base contenant un champ identifiant, puis un ensemble de 5 champs pour définir une activité effectuée dans un interval de temps...
Mais je pense faire une requete WHERE cela ne fait que 6 paramêtres à tester...
Merci à tous
Posté : 29 juin 2005, 13:39
par guilt92
il n'y a vraiment pas moyen de modifier la table ?
sinon tu rajoutes une colonne identifiant, tu la remplis et comme ça tu auras un identifiant
Disons que si je peux éviter de rajouter un champ supplémentaire cela m'arrange...
Merci quand meme
Posté : 29 juin 2005, 13:42
par zeus
Donc si je comprend bien, tu as les 5 lignes et tu veux les supprimer ?
Dans ce cas, il te suffit de faire une requete de suppression pour chacun des identifiants de tes lignes :
//On récupère les lignes à supprimer
$o_result = mysql_query("requete qui donne les 5 lignes");
//On parcours ces lignes
while ($a_result = mysql_fetch_array($o_result)) {
//On construit la requete de suppression sur l'identifiant
$str_requete = "DELETE FROM nomTable WHERE identifiant LIKE '".$a_result["identifiant"];
//On supprime la ligne
mysql_query($str_requete) or die(mysql_error());
}
Posté : 29 juin 2005, 13:49
par guilt92
En fait je ne veux supprimer qu'une seule ligne précise mais du coup je fais un delete avec WHERE et je teste tous les paramêtres...
Je pense que c'est le plus sur maintenant, non ?
Posté : 29 juin 2005, 13:53
par zeus
Si ton identifiant est unique dans la base, ma solution fonctionne parfaitement
Posté : 29 juin 2005, 14:04
par guilt92
oui je suis d accord en fait quand je parlais d identifiant moi je parlais d un login ce qui fait qu il peut se répéter plusieurs fois dans la base, il ne s agit pas d un identifiant au meme titre qu un entier qui serait différent pour chaque entrée...
Merci en tout cas
Posté : 29 juin 2005, 14:06
par ouckileou
heu j'ai du louper une étape là :
je croyais justement que le problème c'est qu'il n'y avait rien pour identifier la ligne ?
Posté : 29 juin 2005, 14:13
par guilt92
Il n'y a aucune valeur qui me permette d'identifier directement ma ligne.
En revanche, la base ne contient aucune redondance et je sais exactement ce que chaque champ doit contenir dans la ligne que je cherche.
Ainsi pour ce problême la je peux tester tous les champs avec un AND et voir si ils correspondent tous à la ligne que je veux supprimer.
Mais en réalité cela m'a fait me demander si il existait une autre solution basée sur le numéro de la ligne dans la base, sujet de ce post.
Voila j espere etre compréhensible je suis un peu fatigué !
