C'est une question simple, mais je n'ai trouvé aucune réponse pendant 2 heures.
Comment utilisez-vous la déclaration MYSQL IF? Peu importe ce que je mets, ça ne marche pas. Dans SQL Server, il s'agit d'un travail de 5 secondes.
Doit-il être dans une procédure?
Pouvez-vous utiliser un SELECT dans une instruction IF?
Pas vraiment intéressé par la fonction IF ici.
Merci pour toute aide.
Comment utiliser l'instruction IF
dans select
select if(status>0, 'active', 'inactive') as status from users
Oui, vous pouvez utiliser select
dans IF
Exemple:
select if((select count(*) from versions) > (select count(*) from groups), true, false) as value
Vous pouvez sélectionner un autre champ dans la même requête mais l'utilisation de la requête select risque de ne pas être prise en charge. Une requête peut renvoyer plusieurs valeurs, mysql ne prenant pas en charge le concept de ligne dans une colonne.
SELECT IF(`field1`>1,`field2`,`field3`) FROM TABLE1 WHERE 1
ici field1
, field2
, field3
sont des champs d'une même table
Est-ce que cela vous aide?
Doit-il être dans une procédure?
Oui, vous devez être dans une procédure pour utiliser une instruction if.
Pouvez-vous utiliser un SELECT dans une instruction IF?
Oui, vous pouvez:
drop procedure if exists sp;
create procedure sp () begin
if ((select 1 /*from whatever table would work*/)=1) then
select 'it works';
end if;
end;
call sp;
drop procedure sp;
Vous l'avez laissé entendre dans votre commentaire , mais aucune des réponses ici ne l'indique explicitement, je vais donc:
Dans MySQL, vous ne pouvez pas utiliser une instruction IF en dehors du corps d’une procédure stockée. La documentation implique cela lorsqu'elle introduit le concept en tant qu '"instruction IF pour programmes enregistrés" (c'est moi qui souligne).
Autant que je sache, il n’existe aucun moyen simple de contrôler le flux d’exécution dans les instructions émises sur la ligne de commande Prompt ou via le client (par exemple, à partir de PHP), sauf en interrogeant des valeurs, puis en basculant le flux de contrôle en fonction de celles en dehors de MySQL. (ie en utilisant l'instruction if
de PHP au lieu de celle de MySQL). J'aimerais bien être corrigé à ce sujet cependant :-)
Vous pouvez simuler ceci au cas par cas en utilisant d'autres constructions ..__ Par exemple:
IF x THEN
INSERT INTO mytable (mycol)
VALUES ('foo')
END IF
pourrait devenir
INSERT INTO mytable (mycol)
SELECT 'foo'
FROM dual
WHERE x
(selon cette réponse )
Vous pouvez également créer, appeler, puis supprimer une nouvelle procédure stockée:
DELIMITER \\
CREATE PROCEDURE tmpfunc() BEGIN
IF x THEN
INSERT INTO mytable (mycol)
VALUES ('foo');
END IF;
END \\
DELIMITER ;
CALL tmpfunc();
DROP PROCEDURE tmpfunc;
(selon cette réponse )
vous recherchez CASE WHEN
? http://dev.mysql.com/doc/refman/5.0/fr/case-statement.html
IF
existe déjà dans le manuel http://dev.mysql.com/doc/refman/5.0/fr/if-statement.html
Je suppose que le lien @Nanne est plus pertinent. Il suffit de l'ajouter à la liste des liens ici. http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html
Plusieurs requêtes MySQL utilisant if illustrent une approche probablement pertinente ici.
Notez que j'ai supposé que cette question demandait "comment puis-je utiliser les données d'une table pour diriger le flux de contrôle susceptible de modifier une autre partie de la base de données?"
CASE
WHEN receiver = '$userid' THEN receiver
ELSE sender
END AS contact