Tôi hy vọng một người nào đó sẽ có thể trợ giúp. Tôi đã tạo ra procdure được lưu trữ đầu tiên của tôi (không có gì ưa thích) tuy nhiên im chạy vào một vấn đề.MYSQL - Quy trình được lưu trữ Sử dụng chuỗi phân tách bằng dấu phẩy như đầu vào biến
Tôi muốn để cho nó một đầu vào chuỗi như 1,2,3,4,5 sau đó nó hoạt động đơn giản SELECT * FROM [TABLE] WHERE EAN IN (VAR);
Vì vậy, các proc lưu trữ trông như thế này:
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$
CREATE PROCEDURE `moments`.`new_procedure`(IN var1 VARCHAR(255))
BEGIN
SELECT * FROM moments.PRODUCT WHERE EAN IN (var1);
END
Im am cố gắng để thực hiện nó như ví dụ:
trình
call moments.new_procedure('5045318357397')
không hoạt động được
call moments.new_procedure('5045318357397,5045318357427');
này thực thi nhưng doesnt không mang lại bất kỳ kết quả. Là nó classing tuyên bố thứ hai như là một chuỗi để nó làm điều này:
select * from moments.PRODUCT WHERE EAN IN ('5045318357397,5045318357427')
và không này:
select * from moments.PRODUCT WHERE EAN IN ('5045318357397','5045318357427')
Làm thế nào để tôi có để định dạng đầu vào trong truy vấn thực hiện để làm cho nó mất một chuỗi phân tách bằng dấu phẩy làm đầu vào?
Điều này hoạt động hoàn hảo bên trong proc được lưu trữ, cảm ơn bạn. Đây cũng là cách tôi sẽ gọi nó từ ứng dụng Cast Iron, đây là phần thưởng bổ sung. – MMKD
hoạt động, nhưng không hiệu quả vì nó cần tìm nạp tất cả các hàng từ bảng, sau đó so sánh từng hàng với tập hợp của bạn, do đó cũng phải lặp qua danh sách được phân cách bằng dấu phẩy để kiểm tra xem nó có khớp không ... Số cột thấp, nếu không thì bạn nên tìm cách đánh dấu – Populus
@Populus bình luận cần được nhổ bật nhiều hơn - FIND_IN_SET không sử dụng bất kỳ chỉ mục bảng nào, vì vậy có khả năng là một vấn đề hiệu suất lớn nếu được sử dụng theo cách này –