Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre régulier
    Requete update imbriqué pose probléme avec une colonne non nulle
    Bonjour,

    J'ai un souci avec une requête qui retourne une erreur depuis le changement de la structure d'une table.

    La requête en question est la suivante :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    UPDATE w5mv5_utilisateurs AS u LEFT JOIN ( SELECT userid, MAX(expiration) AS banned FROM w5mv5_utilisateurs_bannis GROUP BY userid ) AS b ON u.userid=b.userid SET u.banned=b.banned


    L'erreur qui s'affiche quand on exécute cette requête : Le champ 'banned' ne peut être nul

    La structure des deux tables en question :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    CREATE TABLE IF NOT EXISTS `w5mv5_utilisateurs` (
      `userid` int(11) NOT NULL DEFAULT '0',
      `status` tinyint(1) NOT NULL DEFAULT '0',
      `status_text` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0',
      `view` varchar(8) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
      `signature` text COLLATE utf8mb4_unicode_ci,
      `moderator` int(11) DEFAULT '0',
      `banned` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
      `ordering` int(11) DEFAULT '0',
      `posts` int(11) DEFAULT '0',
      `avatar` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
      `timestamp` int(11) DEFAULT NULL,
      `karma` int(11) DEFAULT '0',
      `karma_time` int(11) DEFAULT '0',
      `group_id` int(4) DEFAULT '1',
      `uhits` int(11) DEFAULT '0',
      `personalText` tinytext COLLATE utf8mb4_unicode_ci,
      `gender` tinyint(4) NOT NULL DEFAULT '0',
      `birthdate` date DEFAULT NULL,
      `location` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
      `ip` varchar(125) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
      `socialshare` tinyint(1) NOT NULL DEFAULT '1',
      PRIMARY KEY (`userid`),
      KEY `group_id` (`group_id`),
      KEY `posts` (`posts`),
      KEY `uhits` (`uhits`),
      KEY `banned` (`banned`),
      KEY `moderator` (`moderator`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
     
     
    CREATE TABLE IF NOT EXISTS `w5mv5_utilisateurs_bannis` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `userid` int(11) DEFAULT NULL,
      `ip` varchar(128) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
      `blocked` tinyint(4) NOT NULL DEFAULT '0',
      `expiration` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
      `created_by` int(11) NOT NULL,
      `created_time` datetime NOT NULL DEFAULT '1000-01-01 00:00:00',
      `reason_private` text COLLATE utf8mb4_unicode_ci,
      `reason_public` text COLLATE utf8mb4_unicode_ci,
      `modified_by` int(11) DEFAULT NULL,
      `modified_time` datetime DEFAULT NULL,
      `comments` text COLLATE utf8mb4_unicode_ci,
      `params` text COLLATE utf8mb4_unicode_ci,
      PRIMARY KEY (`id`),
      KEY `userid` (`userid`),
      KEY `ip` (`ip`),
      KEY `expiration` (`expiration`),
      KEY `created_time` (`created_time`)
    ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


    Comment faire pour la requête update modifie seulement les enregistrements qui sont retournés via le select ?

    Merci d'avance

  2. #2
    Expert éminent sénior
    Bonjour,

    Remplacez simplement la jointure outer par une jointure inner

  3. #3
    Membre régulier
    Bonjour,

    Je viens d'essayer, effectivement cela fonctionne. Merci