Ich habe nicht erwartet, dass dies so schwer zu finden, aber ich versuche, eine Benutzervariable in MySQL zu setzen, um ein Array von Werten zu enthalten. Ich habe keine Ahnung, wie ich das machen soll, habe also versucht, etwas zu recherchieren und war ziemlich überrascht, keine Antwort zu finden. Ich habe versucht:Wie setze ich ein Array als mysql Benutzervariable
SET @billable_types = ['client1','client2','client3'];
Der Grund dafür möchte ich später auf die Variable in der folgenden Aussage verwenden:
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;
Wäre sehr dankbar für die Hilfe.
Vorspulen eine Weile, landete ich mit der folgenden quick and dirty Lösung auf, die mir nicht gibt die Flexibilität der Wiederverwendung den Arrays an anderer Stelle im Code, aber hey, es ist eine nicht aufladbar Admin-Aufgabe so dass ich don Ich will keine Zeit mehr damit verbringen.
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 scheint die eleganteste Lösung gefunden zu haben (es nicht selbst noch nicht getestet), aber das nächste Mal, wenn ich bin etwas zu schreiben, die für diese Anrufe ich es zu testen erinnern!
Es gibt keine Arrays in SQL - es gibt nur Sätze. Leider funktioniert das, was Sie versuchen, nicht - mysql wird @billtable_types durch den Inhalt Ihres "Arrays" als eine einzige monolithische Zeichenfolge ersetzen und es nicht als eine Menge separater kommagetrennter Werte betrachten. Versuchen Sie es mit der 'FIND_IN_SET()' -Funktion anstelle des 'IN'-Operators. –