par
yann18 » 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();
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.
[PHP]
$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
");
[/PHP]
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:
[PHP]
$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();
[/PHP]