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!

il n'y a pas une telle chose comme des tableaux dans SQL - il n'y a qu'ensembles. Malheureusement, ce que vous essayez de ne pas travailler - mysql va remplacer @billtable_types avec le contenu de votre "tableau" comme un seul monolithique de la chaîne, et de ne pas le considérer comme un tas de séparer les valeurs séparées par des virgules. Essayez d'utiliser le FIND_IN_SET() fonction de la place de la IN de l'opérateur.

OriginalL'auteur Chris B | 2012-07-11