Requête SQL
Fermé
Numbyscuit
Messages postés
18
Date d'inscription
mercredi 20 juin 2012
Statut
Membre
Dernière intervention
23 janvier 2013
-
25 juin 2012 à 13:22
Numbyscuit Messages postés 18 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 23 janvier 2013 - 26 juin 2012 à 09:58
Numbyscuit Messages postés 18 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 23 janvier 2013 - 26 juin 2012 à 09:58
A voir également:
- Requête SQL
- Erreur lors de l'envoi de la requête facebook marketplace - Forum Facebook
- Logiciel sql - Télécharger - Bases de données
- Il y a eu un problème avec cette requête. nous travaillons à sa résolution aussi vite que nous le pouvons. - Forum Facebook
- Sql replace plusieurs valeurs - Forum Programmation
- Récupération serveur sql - Télécharger - Gestion de données
5 réponses
maka54
Messages postés
698
Date d'inscription
mercredi 8 avril 2009
Statut
Membre
Dernière intervention
4 décembre 2016
80
25 juin 2012 à 14:11
25 juin 2012 à 14:11
DELETE FROM adresses WHERE ID_Adresse IN( SELECT ID_Adresse FROM adresses LEFT OUTER JOIN avoir ON avoir.ID_Adresse = adresses.ID_Adresse WHERE avoir.ID_Client IS NULL OR avoir.ID_Adresse IS NULL)
DELETE adresses.*
FROM adresses
LEFT JOIN avoir ON avoir.ID_Adresse = adresses.ID_Adresse
WHERE avoir.ID_Adresse IS NULL
Ce SQL supprime toute ligne de la table "adresses" dont la valeur de "ID_Adresse" n'est pas présente dans avoir.ID_Adresse, autrement dit toute adresse non-utilisée par la table "avoir", qu'importe que le client existe ou non.
Est-ce vraiment ce qui est souhaité ?
FROM adresses
LEFT JOIN avoir ON avoir.ID_Adresse = adresses.ID_Adresse
WHERE avoir.ID_Adresse IS NULL
Ce SQL supprime toute ligne de la table "adresses" dont la valeur de "ID_Adresse" n'est pas présente dans avoir.ID_Adresse, autrement dit toute adresse non-utilisée par la table "avoir", qu'importe que le client existe ou non.
Est-ce vraiment ce qui est souhaité ?
Numbyscuit
Messages postés
18
Date d'inscription
mercredi 20 juin 2012
Statut
Membre
Dernière intervention
23 janvier 2013
25 juin 2012 à 14:28
25 juin 2012 à 14:28
PhpMyAdmin m'a renvoyé le message d'erreur suivant :
#1052 - Column 'ID_Adresse' in field list is ambiguous
J'ai donc adapté la requête SQL :
Et j'ai eu l'erreur suivante :
#1093 - You can't specify target table 'adresses' for update in FROM clause
#1052 - Column 'ID_Adresse' in field list is ambiguous
J'ai donc adapté la requête SQL :
DELETE FROM adresses WHERE adresses.ID_Adresse IN( SELECT adresses.ID_Adresse FROM adresses LEFT OUTER JOIN avoir ON avoir.ID_Adresse = adresses.ID_Adresse WHERE avoir.ID_Client IS NULL OR avoir.ID_Adresse IS NULL)
Et j'ai eu l'erreur suivante :
#1093 - You can't specify target table 'adresses' for update in FROM clause
Numbyscuit
Messages postés
18
Date d'inscription
mercredi 20 juin 2012
Statut
Membre
Dernière intervention
23 janvier 2013
25 juin 2012 à 18:28
25 juin 2012 à 18:28
Super ! Ça marche, merci !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Numbyscuit
Messages postés
18
Date d'inscription
mercredi 20 juin 2012
Statut
Membre
Dernière intervention
23 janvier 2013
Modifié par Numbyscuit le 26/06/2012 à 10:00
Modifié par Numbyscuit le 26/06/2012 à 10:00
Bonjour,
J'aurai une autre question.
J'aimerai que le client puisse mettre à jour son nom et prénom (jusqu'ici, aucun problème), mais que ça renvoie un message d'erreur si un client partageant la même adresse que lui a déjà le même nom et prénom.
Voici tout d'abord le formulaire qui renvoie les informations :
Voilà maintenant la connexion à la BDD et la définition des variables de post, de session, et de la fonction "anti-doublon".
Le tout sera vérifié par cette condition :
Or, le code semble totalement ignorer ces conditions. Sauriez-vous où est le problème, s'il vous plait ?
J'aurai une autre question.
J'aimerai que le client puisse mettre à jour son nom et prénom (jusqu'ici, aucun problème), mais que ça renvoie un message d'erreur si un client partageant la même adresse que lui a déjà le même nom et prénom.
Voici tout d'abord le formulaire qui renvoie les informations :
<form method="post" action="ciblezone.php"> <br /> <h5>- Les champs marqués d'un <span class=\"ast\">*</span> sont obligatoires.<br /> - L'identifiant doit être compris entre 3 et 20 caractères. <br/> - Le mot de passe entre 5 et 20 caractères. <br/> - Le nom et le prénom doivent être compris entre 2 et 20 caractères.<br/> - Si vous remplissez un des champs de l'adresse postale, il vous sera demandé de remplir les autres.<br /> </h5> <fieldset class="inscr"> <legend>Informations sur le site</legend> <span class="ast">*</span><label for="pseudo">Identifiant : </label> <input type="text" name="pseudo" id="pseudo" class="champ" value="<?php echo htmlspecialchars($_SESSION['pseudo']) ?>" required /> <br /><br /> <span class="ast">*</span><label for="psw">Mot de passe : </label> <input type="password" name="psw" id="psw" class="champ" required value ="<?php echo htmlspecialchars($_SESSION['psw']) ?>" /> <br /><br /> <span class="ast">*</span><label for="repsw">Confirmez votre mot de passe : </label> <input type="password" name="repsw" id="repsw" class="champ" value="<?php echo htmlspecialchars($_SESSION['repsw']) ?>" required /> <br /> <br /> <span class="ast">*</span><label for="mail">Email : </label> <input type="email" name="mail" id="mail" class="champ" required value="<?php echo htmlspecialchars($_SESSION['mail']) ?>" /> <br /> </fieldset> <br /> <fieldset class="inscr"> <legend>Informations personnelles de l'utilisateur</legend> <span class="ast">*</span><label for="nom">Nom : </label> <input type="text" name="nom" id="nom" class="champ" value="<?php echo htmlspecialchars($_SESSION['nom']) ?>" required /> <br /><br /> <span class="ast">*</span><label for="prenom">Prénom : </label> <input type="text" name="prenom" id="prenom" class="champ" value="<?php echo htmlspecialchars($_SESSION['prenom']) ?>" required /> <br /><br /> <label for="tel">Numéro de téléphone : </label> <input type="text" name="tel" id="tel" class="champ" value="<?php echo htmlspecialchars($_SESSION['tel']) ?>" /> <br /> </fieldset> <br /> <br /> <div class="inscr"> <input type="submit" value="Mettre à jour" /> <input type="reset" value="Réinitialiser" /> </div> </form>
Voilà maintenant la connexion à la BDD et la définition des variables de post, de session, et de la fonction "anti-doublon".
<?php /*Connexion à BDD */ try { // On se connecte à MySQL $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; $bdd = new PDO('mysql:host=localhost;dbname=bdd_exiastore', 'root', '', $pdo_options); $bdd->exec('SET NAMES utf8'); } catch(Exception $e) { // En cas d'erreur, on affiche un message et on arrête tout die('Erreur : '.$e->getMessage()); } // Paramètres pour un pseudo unique $log = $_POST['pseudo']; $currentLog = $_SESSION['pseudo']; // Définition du pseudo courant, pour ne pas que ça affiche d'erreur si le login reste inchangé $sql = "SELECT * FROM clients WHERE clients.PseudoClient ='".$log."' AND clients.PseudoClient <> '".$currentLog."' "; $req = $bdd->query($sql); $req->setFetchMode(PDO::FETCH_OBJ); // Paramètres pour un mail unique $courriel = $_POST['mail']; $currentMail = $_SESSION['mail']; // Définition du mail courant, pour ne pas que ça affiche d'erreur si le mail reste inchangé $sqlDeux = "SELECT * FROM clients WHERE clients.EmailClient ='".$courriel."' AND clients.EmailClient <> '".$currentMail."' "; $reqDeux = $bdd->query($sqlDeux); $reqDeux->setFetchMode(PDO::FETCH_OBJ); // Nom $name = $_POST['nom']; $currentName = $_SESSION['nom']; // Prénom $prename = $_POST['prenom']; $currentPrename = $_SESSION['prenom']; // Vérification $checkAdd = $bdd->query("SELECT adresses.RueAdresse, adresses.CPAdresse, adresses.VilleAdresse, adresses.PaysAdresse, clients.NomClient, clients.PrenomClient FROM( (adresses INNER JOIN avoir ON avoir.ID_Adresse = adresses.ID_Adresse) INNER JOIN clients ON clients.ID_Client = avoir.ID_Client ) WHERE clients.NomClient ='".$name."' AND clients.NomClient <> '".$currentName."' AND clients.NomClient ='".$prename."' AND clients.NomClient <> '".$currentPrename."' "); $checkAdd->setFetchMode(PDO::FETCH_OBJ);
Le tout sera vérifié par cette condition :
else if($ligneAdd = $checkAdd->fetch() ) { echo "Un autre compte possède déjà les mêmes nom, prénom, et adresse. " ; header("Refresh: 3; URL= zone.php" ) ; }
Or, le code semble totalement ignorer ces conditions. Sauriez-vous où est le problème, s'il vous plait ?