[RESOLU] update table en fonction d'une autre table join ?

Eléphanteau du PHP | 31 Messages

04 févr. 2018, 21:14

Bonjour les amies,

j'ai une requete qui met à jour une colonne avec un timestamp pour peut importe l'utilisateur homme ou femme sans probleme la voici:

Code : Tout sélectionner

$nb_modifs = $bdd->exec('UPDATE vld_members SET lastvisit='.$var.' ORDER BY RAND() LIMIT 5') or die(print_r($bdd->errorInfo()));
cette requete mais ajour une colonne aléatoirement limit à 5 row.

maintenant je voudrais que créér une nouvelle requette qui met à jour ce meme champ mais seulement si la colonne est un homme .

Et pour cela j'ai une autre requete qui fonctionne la voici

Code : Tout sélectionner

$sListeHomme = $oPDO->prepare("SELECT * FROM vld_members as m INNER JOIN vld_members_data_members as md on m.member_id = md.data_id WHERE md.data_gender1 = 1 ORDER BY RAND() LIMIT $nNombreHomme");
pouvez vous me dire ce que je doit faire pour relier mettre à jour la colonne : lastvisit que si la colonne qui se trouve dans l'autre table = data_gender1 = 1 > ou = homme et 2 serais un homme



c'est la premiere fois que je fais un update avec un critere qui se trouve sur une autre table join je suis perdu meme en cherche sur google je n'arrive pas à savoir comment je doit my prendre pour chercher..

ce que je doit faire.



merci de votre aide

Mammouth du PHP | 538 Messages

05 févr. 2018, 15:09

en fait si tu lis la doc mysql, il est possible de faire UPDATE sur des tables jointes. Seulement voilà, les clauses ORDER ET LIMIT ne sont pas acceptées dans une requête UPDATE portant sur plusieurs tables.Pour contourner cet obstacle, tu peux dire à mysql que ta jointure ne portera pas sur la table mais sur un ensemble de données, issues d'une requête SELECT.

$sListeHomme = $oPDO->prepare("
UPDATE vld_members m JOIN (
     SELECT data_id FROM vld_members_data_members
     WHERE data_gender1 = 1 
     ORDER BY RAND() LIMIT $nNombreHomme
      ) AS md on m.member_id = md.data_id 
    SET m.lastvisit=$var
");

A noter qu'il est déconseillé,pour des raisons d'optimisation et de sécurité -cf. injection sql, d'injecter directement des variables dans la requête préparée.On peut exécuter une requête preparée en associant des variables par exemple:

$sListeHomme = $oPDO->prepare("
UPDATE vld_members m JOIN (
     SELECT data_id FROM vld_members_data_members
     WHERE data_gender1 = 1 
     ORDER BY RAND() LIMIT :nbHommes
      ) AS md on m.member_id = md.data_id 
    SET m.lastvisit= :lastvisit
");

$sListeHomme->bindValue(':nbHommes', $nNombreHomme, PDO::PARAM_INT);
$sListeHomme->bindValue(':lastvisit', $var, PDO::PARAM_INT); //si $var est entier => PDO::PARAM_INT sinon passer le bon type

$sListeHomme->execute();


Eléphanteau du PHP | 31 Messages

05 févr. 2018, 16:54

Merci Yann je test et je te fait un retour..

Eléphanteau du PHP | 31 Messages

06 févr. 2018, 17:05

Bravo Yann !!
çà marche super !!

Code : Tout sélectionner

UPDATE vld_members m JOIN ( SELECT data_id FROM vld_members_data_members WHERE data_gender1 = 1 ORDER BY RAND() LIMIT 5 ) AS md on m.member_id = md.data_id SET m.lastvisit='1402427653'
j'ai tester il fait exactement ce que j'ai besoin bravo 1000 fois =D> :D