Tôi không mong đợi điều này quá khó, nhưng tôi đang cố gắng đặt biến người dùng trong MySQL để chứa một mảng giá trị. Tôi không có đầu mối làm thế nào để làm điều này vì vậy đã cố gắng làm một số nghiên cứu và đã khá ngạc nhiên khi tìm thấy không có câu trả lời. Tôi đã thử:cách đặt mảng dưới dạng biến người dùng mysql
SET @billable_types = ['client1','client2','client3'];
Lý do hạnh phúc Tôi muốn sử dụng biến trong phát biểu sau về sau:
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;
Sẽ rất biết ơn sự giúp đỡ.
Nhanh chóng chuyển tiếp một thời gian, tôi đã kết thúc với giải pháp nhanh chóng và dơ bẩn sau đó không cho tôi sự linh hoạt của việc tái sử dụng các mảng khác trong các mã nhưng hey đó là một nhiệm vụ quản trị unchargeable vì vậy tôi don không muốn tốn thêm thời gian nữa.
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 dường như đã tìm thấy giải pháp thanh lịch nhất (chưa thử nghiệm bản thân) nhưng lần sau tôi viết thử thứ mà tôi sẽ nhớ để kiểm tra!
không có thứ gì như mảng trong SQL - chỉ có các bộ. Thật không may, những gì bạn đang cố gắng không hoạt động - mysql sẽ thay thế @billtable_types với nội dung của "mảng" của bạn như là một chuỗi nguyên khối duy nhất, và không xem nó như là một loạt các giá trị phân cách bằng dấu phẩy riêng biệt. Hãy thử sử dụng hàm 'FIND_IN_SET()' thay cho toán tử 'IN'. –