Besoin d'aide pour une requête un peu spéciale.

Eléphanteau du PHP | 13 Messages

09 janv. 2009, 17:22

Bonjour à tous,

J'ai besoin d'aide pour une requête assez spéciale. Je dois sélectionner tout d'abord dans une table appellée "PANIER" des articles correspondant à une personne précise, (je sélectionne donc tout et fait un WHERE pour n'avoir que l'utilisateur qui m'interesse) et une fois les produits de ce pannier récupéré je voudrais modifier un champ ("statut") présent dans une autre table "ARTICLE", tous les articles modifiés dans cette dernière table correspondent donc aux articles du select précédent.

J'espère que vous arrivez à me suivre. :? et je vois pas trop comment faire.

EDIT: j'ai tenté ça, mais ça n'a pas l'air de fonctionner:
mysql_query("UPDATE article SET statut='".$_SESSION[login]."' IN (SELECT * FROM panier WHERE user='".$_SESSION[_login]."')");

Mammouth du PHP | 881 Messages

09 janv. 2009, 18:05

Salut!
mysql_query("UPDATE article SET statut='".$_SESSION[login]."' IN (SELECT * FROM panier WHERE user='".$_SESSION[_login]."')");
Dans cette commande il n'ya pas de champ de référence à comparer. Essaie quelque chose comme:
mysql_query("UPDATE article SET statut='".$_SESSION[login]."' WHERE id_article IN (SELECT * FROM panier WHERE user='".$_SESSION[_login]."')");
Soyez artisans de paix

Eléphanteau du PHP | 13 Messages

11 janv. 2009, 12:42

Apparemment cela ne marche pas jvais essayer de vous donner un peu plus de détails:

***MA TABLE COMMANDE***:
Image

***MA TABLE ARTICLE*****:
Image

***Mise à jour des articles:***:
/mysql_query("UPDATE article SET statut='".$_SESSION[login]."' WHERE numarticle IN (SELECT * FROM panier WHERE user='".$_SESSION[_login]."')");
C'est donc cette requète qui ne fonctionne apparemment pas.

:?

EDIT: si quelqu'un pouvait regarder d'un peu plus prêt ce serait super, ça me bloque dans tout mon projet, cette requête foireuse :evil: :P

Mammouth du PHP | 881 Messages

11 janv. 2009, 18:43

Bon ... si tu veux que je t'aide, il faudrait nous donner tes tables en texte, du genre "CREATE TABLE ...."
Tu obtiendras cela dans phpmyadmin, onglet "Exporter" en prenant soin de mettre un crochet dans la case "structure".
C'est d'ailleurs dans les règlements du forum, section Base de données que de donner la structure de la table litigieuse.

Dans ce que tu présentes ci-haut, il n'y rien sur la table "panier".
Tu dois nous fournir tous les éléments.

Aussi, n'hésite pas à faire des tests dans phpmyadmin en utilisant la fenêtre sql. Lorsque tu fais cela, tu dois enlever, bien sûr, les éléments PHP comme la commande mysql_query, des parenthèses, des apostrophes ou guillemets selon le cas. C'est très utile pour déboguer.

À partir de ce que tu présentes déjà, voici quelques commentaires:
Dans la table "commande", ton second champ ne devrait pas s'appeler "timestamp", mais devrait être de type "timestamp" Tu pourrais même le faire mettre à jour automatiquement. Appelle-le comme tu veux, mais pas avec un nom de type de champ ni un nom qui puisse ressembler à une commande (ex. "date")

Le même commentaire vaut pour tes champs de la table "article" J'ignore si tu as plusieurs "statuts" possibles pour tes articles, parfois ce peut être pratique d'avoir des possibilités fixes afin de standardisé la caractérisation des choses. Ainsi tu pourrais aroiv un type "ENUM" pour tes "statut".

Si tu veux me donner des données de ta banque pour que je puisse faire des tests, tu peux me les envoyer par courriel, mais affiche la structure de ta base sur le présent forum en version texte pour que tous puissent faire copier-coller dans phpmyadmin.
Soyez artisans de paix

Eléphanteau du PHP | 13 Messages

12 janv. 2009, 03:04

J'ai réglé le problème, j'ai fait en deux fois avec un while:
			$sql=mysql_query("SELECT * FROM panier WHERE user='".$_SESSION[_login]."'");
			while ($donnees = mysql_fetch_array($sql))
			{
				mysql_query("UPDATE article SET statut='".$_SESSION[_login]."' WHERE numarticle='".$donnees['narticle']."'");
			}
Merci beaucoup :D