Bonjour, j'aimerais exécuter une requête sur une table dont je ne connais pas le nom. J'ai deux tables admins et users qui possèdent tous deux les colonnes email et attempted. J'aimerais changer la valeur de attempted à CURRENT_TIMESTAMP là où l'email existe. Pour l'instant j'ai ceci :

    static private function getTable(string $email): string
    {
        return $GLOBALS['db']->query(sprintf(
            "SELECT
               'users'
             FROM
                users
             WHERE
                email = '%1\$s'
             UNION
             SELECT
                'admins'
             FROM
                admins
             WHERE
                email = '%1\$s'",
            $email
        ))->fetch_array(MYSQLI_NUM)[0];
    }

    static public function update(string $email): void
    {

        $GLOBALS['db']->query(sprintf(
            "UPDATE
                `%s`
             SET
                attempted = CURRENT_TIMESTAMP
             WHERE email = '%s'
            ",
            self::getTable($email),
            $email
        ));
    }



Je suppose qu'il y a moyen de faire ça plus facilement mais je n'y parvient pas.
Merci beaucoup de votre temps, passez une agréable soirée! (:
Modérateur
Bonjour,

1) Il eut été préférable d'avoir une table admins avec entre autre un champ email_id, une table users avec entre autre un champ email_id, et une table email avec entre autre un champ id (dont la valeur sera recopiée dans les champs email_id des tables admins ou users), un champ adresse_email, un champ attempted, etc.

2) Mais bon, si ce n'est pas le cas, et si ce n'est pas possible que ce soit le cas à l'avenir, il est probable que le plus efficace serait de faire simplement 2 updates à la suite (1 sur chaque table), ou éventuellement un select pour trouver dans quelle table se trouve l'email, plutôt que d'essayer de bricoler avec une UNION (ou n'importe quelle autre combine qui réunirait les informations des deux tables), ce qui serait probablement bien plus couteux.

Amicalement,