comment définir un tableau comme un utilisateur mysql variable
Je ne m'attendais pas à trouver ce si difficile, mais je vais essayer de définir une variable utilisateur dans MySQL pour contenir un tableau de valeurs. Je n'ai aucune idée de comment faire cela donc essayé de faire quelques recherches et a été très surpris de ne trouver aucune réponse. J'ai essayé:
SET @billable_types = ['client1','client2','client3'];
La raison étant que je voudrais utiliser la variable dans la déclaration suivante au plus tard:
SELECT sum((time_to_sec(timediff(tlg.time_stop, tlg.time_start))/3600)) as billable_hours
from mod_tmlog_time_log tlg, mod_tmlog_task_list mttl
where date(tlg.time_start) >= @time_start
and date(tlg.time_stop) <= @time_stop
and mttl.type IN (@billable_types)
and tlg.task_id = mttl.id
group by start_date
order by start_date desc;
Serais très reconnaissant de l'aide.
Rapide de l'avant un certain temps, j'ai fini avec la suite de "rapide et sale" solution qui ne me donne pas la souplesse de la ré-utilisation de la matrice ailleurs dans le code, mais bon c'est un unchargeable admin tâche donc je n'ai pas envie de passer plus de temps sur elle.
SELECT WEEKDAY(tlg.time_start) AS day_of_week, date(tlg.time_start) as start_date,
sum((time_to_sec(timediff(tlg.time_stop, tlg.time_start))/3600)) as billable_hours
from mod_tmlog_time_log tlg, mod_tmlog_task_list mttl
where date(tlg.time_start) >= @time_start
and date(tlg.time_stop) <= @time_stop
and mttl.type IN ('c1','c2','c3')
and tlg.task_id = mttl.id
group by start_date
order by start_date desc;
joostschouten semble avoir trouvé la solution la plus élégante (pas testé moi-même encore) mais la prochaine fois que je suis en train d'écrire quelque chose qui appelle pour cela, je vais vous rappeler de le tester!
FIND_IN_SET()
fonction de la place de la IN
de l'opérateur.OriginalL'auteur Chris B | 2012-07-11
Vous devez vous connecter pour publier un commentaire.
Viens de trouver la réponse ici: Combien de cycle avec un tableau dans MySQL?
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 'in @billable_types)
OriginalL'auteur hepabolu
Marc B mentionné, il n'y a pas de variable de tableau dans MYSQL.
L'alternative à find_in_set solution est d'utiliser SÉLECTIONNEZ avec UNION pour simuler le tableau:
Afin que votre requête ressemble à ça:
OriginalL'auteur Kostanos
Si l'utilisateur a le CRÉER privilège de TABLE, un tableau peut être simulé par la création d'un temporaire, d'une seule colonne de la table. Une ou des valeurs du tableau peuvent être récupérées avec une instruction SELECT. Les tables temporaires sont supprimées à la fin de la session, mais c'est une bonne idée explicitement les déposer une fois qu'ils ne sont plus nécessaires.
OriginalL'auteur MrMayor