Comment stocker le résultat de la requête dans une variable en utilisant mysql


92
SET @v1 := SELECT COUNT(*) FROM user_rating;
SELECT @v1

Lorsque j'exécute cette requête avec une setvariable, cette erreur s'affiche.

Error Code : 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use
near 'SELECT count(*) FROM user_rating' at line 1

Execution Time : 00:00:00:000
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:000

(1 row(s) returned)
Execution Time : 00:00:00:343
Transfer Time  : 00:00:00:000
Total Time     : 00:00:00:343

Réponses:


149

Entourez cette sélection avec des parenthèses.

SET @v1 := (SELECT COUNT(*) FROM user_rating);
SELECT @v1;

12
Cette sous-requête devrait-elle contenir seulement 1 ligne et 1 colonne? 1. #1242 - Subquery returns more than 1 row , 2.#1241 - Operand should contain 1 column(s)
Shafizadeh

1
@RajatGupta: où l'exécutez-vous? Et définissez «ne fonctionne pas».
Sergio Tulentsev

3
@Shafizadeh: oui, cette sous-requête ne devrait renvoyer qu'une seule ligne et colonne
Sergio Tulentsev

1
@Black: peut-être que certaines des autres réponses fonctionneront.
Sergio Tulentsev

2
Il semble que la valeur de retour doit être un, pas une liste de valeurs
Victor S

35

De plus, si vous souhaitez définir plusieurs variables à la fois par une requête, vous pouvez utiliser l'autre syntaxe pour la définition des variables qui va comme ceci: SELECT @varname:=value.

Un exemple pratique:

SELECT @total_count:=COUNT(*), @total_price:=SUM(quantity*price) FROM items ...

8

utilisez ceci

 SELECT weight INTO @x FROM p_status where tcount=['value'] LIMIT 1;

testé et fonctionne très bien ...


que signifient les crochets []dans cette déclaration?
amin le

rien ce n'est qu'un espace réservé skip [] et mettez simplement votre valeur entre guillemets simples
Aman Maurya

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.