-1
votes

Utiliser si dans une requête MySQL ne fonctionne pas - Problèmes de syntaxe

Voici ma requête. $ SESES est une variable de session, qui est un numéro de compte. C'est ici que le problème se produit: si (toacct = $ Sess, montant, '-'. Montant) Comme montant

si le compte de compte "à" = le numéro de compte de la variable de la session, je veux que le champ montant soit positif . Si le compte "sur" Le numéro de compte de la variable de session, je veux un signe avant le montant. Je ne suis tout simplement pas sûr de ce que devrait être la syntaxe. P>

SELECT transID, toAcct, fromAcct, 
  IF(toAcct = $sess, amount, '-'.amount) as amount, `description`, 
  `timestamp`, 
  IF(toAcct = $sess, toAcctNewBalance, fromAcctNewBalance) AS balance 
FROM transactions 
WHERE transactions.toAcct = $ACCT or transactions.fromAcct = $ACCT 
ORDER BY transactions.timestamp DESC


6 commentaires

Est $ sess un numéro? Qu'en est-il de $ acct ?


S'il s'agit de MySQL, retirez les crochets.


Utilisez un cas au lieu de si intérieur Sélectionnez CLAUSES.


@Dai, pourquoi? Il n'y a aucune raison de ne pas utiliser si fonctionner sur une condition simple.


@Danblack Désolé, je pensais à SQL Server (bien que dans T-SQL, il y a iif (x, y, z) ).


Case Les expressions sont standard SQL et portables et comprises par tout le monde.


3 Réponses :


2
votes

Ceci est votre code:

       (CASE WHEN toAcct = $sess THEN toAcctNewBalance ELSE fromAcctNewBalance
        END) AS balance


0 commentaires

0
votes

si quantité code> est toujours un nombre positif, puis utilisez ceci: xxx pré>

s'il est peut-être négatif, alors: p>

IF(toAcct = $sess, abs(amount), -abs(amount))


0 commentaires

0
votes

Voici comment je l'ai eu pour fonctionner:

SELECT   transID, toAcct, fromAcct, 
         IF(toAcct = $sess, amount, -amount) as amount, 
         `description`, timestamp, 
         IF(toAcct = $sess, toAcctNewBalance, fromAcctNewBalance) AS balance 
FROM     transactions 
WHERE    transactions.toAcct = $ACCT OR transactions.fromAcct = $ACCT 
ORDER BY transactions.timestamp DESC;


0 commentaires