Tôi có một hai bảng. Một có thông tin về nhà sản xuất và bao gồm các khu vực nơi họ có thể bán. Người khác có sản phẩm của họ để bán. Chúng tôi phải giới hạn khả năng hiển thị của sản phẩm dựa trên các khu vực. Điều này giống như Netflix có các video trong hệ thống của họ chỉ có thể xem ở mọi nơi (1), chỉ ở Canada (2), chỉ ở Mỹ (3).
Tôi đang cố gắng thực hiện một truy vấn cho tôi biết sản phẩm có thể được xem ở đâu dựa trên cài đặt trong bảng nhà sản xuất.
Ví dụ: trong bảng nhà sản xuất, có hai trường được gọi là expo_new và exped_used, mỗi trường sẽ có giá trị là 1,2 hoặc 3 để giới hạn nơi có thể xem video mới hoặc đã sử dụng của họ.
Khi video được thêm vào, chúng không được gán giá trị 'exped' và điều này có nghĩa là được thực hiện nhanh chóng khi thêm chúng vào chỉ mục của chúng tôi tùy thuộc vào giá trị exp_new hoặc exp_used của nhà sản xuất hiện tại.
Những gì tôi đang cố gắng lấy là chi tiết mặt hàng và giá trị được tính cho nơi nó có thể được nhìn thấy dựa trên việc nó là mới hay đã qua sử dụng và quy tắc / giá trị được chỉ định cho nhà sản xuất cho tất cả các sản phẩm mới hoặc đã qua sử dụng của họ. Tôi cần một chữ số này trên cơ sở từng sản phẩm để hiển thị có điều kiện nó trong danh sách.
Những điều sau đây không hiệu quả, nhưng bạn sẽ hiểu được những gì tôi đang cố gắng làm. Tôi đã thử điều này với câu lệnh CASE và câu lệnh SAI / ELSEIF SAI sau đây.
Bất kỳ trợ giúp nào để gỡ lỗi này và chỉ cho tôi đi đúng hướng sẽ được đánh giá cao.
SELECT
t2.company_name,
t2.expose_new, // 1,2 or 3
t2.expose_used, // 1,2 or 3
t1.title,
t1.seller,
t1.status, //can be new or used
(SELECT
IF(status ='New',
(select expose_new from manufacturers where id = t1.seller),1
)
ELSEIF(t1.status ='Used',
(select expose_used from manufacturers where id = t1.seller),1
)
END IF
) as 'expose'
FROM `products` t1
join manufacturers t2 on t2.id = t1.seller
where t1.seller = 4238
Đây là phiên bản CASE thực sự có vẻ thực thi nhưng luôn dẫn đến giá trị đầu tiên cho dù điều gì xảy ra là đúng (trong trường hợp này là 1). Tôi không chắc rằng tôi có thể có thêm một bài kiểm tra khác với AND trong mỗi câu lệnh WHEN nhưng nó không đưa ra lỗi, chỉ có kết quả sai.
SELECT
t2.company_name,
t2.expose_new,
t2.expose_used,
t1.title,
t1.status,
CASE status
when 'New' and t2.expose_new = 1 then 1
when 'New' and t2.expose_new = 2 then 2
when 'New' and t2.expose_new = 3 then 3
when 'Used' and t2.expose_used = 1 then 1
when 'Used' and t2.expose_used = 2 then 2
when 'Used' and t2.expose_used = 3 then 3
END as expose
FROM `products` t1
join manufacturers t2 on t2.id = t1.seller
where t1.seller = 4238