sách gpt4 ăn đã đi

php - Mysql group_concat(id) làm id ở phần bên trái và chọn tất cả các cột trong nhóm id bằng id

In lại Tác giả: Walker 123 Thời gian cập nhật: 29-11-2023 07:08:40 29 4
mua khóa gpt4 giày nike

Tôi có một bảng chứa một số bài viết có ID riêng và khóa SKU dùng chung. Tôi đã thử thực hiện một truy vấn bằng cách sử dụng phép nối trái và sử dụng kết quả nhóm để nhận tất cả các id được trả về từ truy vấn.

Cấu trúc dữ liệu của tôi là như thế này:

id - tên - sku - ...
1 - felix - mèo
2 - tom - mèo - ...
3 - sylvester - mèo - ...
4 - đỏ - bút - ...
5 - xanh - bút - ...

Tôi cố gắng sử dụng truy vấn này:

CHỌN * TỪ `test` 
[TRÁI/PHẢI/BÊN TRONG] THAM GIA
(
CHỌN GROUP_CONCAT(ID DISTINCT) LÀ idsgroup TỪ `test` Ở ĐÂU (tên_thuộc_tính = 'sku') NHÓM THEO tên_giá_trị GIỚI HẠN 0, 3
) ràng buộc
TRÊN id TRONG (bind.idsgroup);

Truy vấn này sai, nó chỉ trả về 1 id cho mỗi nhóm thay vì tất cả các id được chọn từ trường hợp concat hoặc LEFT JOIN, rõ ràng là tất cả các hàng.

Có cách giải quyết nào được đề xuất để đạt được kết quả chính xác không?

biên tập:

Đây là một cấu trúc: http://sqlfiddle.com/#!9/b6747a

Truy vấn tôi đã thử:

   CHỌN * TỪ `view_test` 
NỐI BÊN TRONG
(
CHỌN GROUP_CONCAT(DISTINCT entity_id) LÀ idsgroup TỪ `view_test` Ở ĐÂU (tên_thuộc_tính = 'sku') NHÓM THEO tên_giá_trị GIỚI HẠN 0, 3
) ràng buộc
TRÊN entity_id IN (bind.idsgroup);

Như hình ảnh này hiển thị, kết quả của tôi thiếu một số ID là một phần của nhóm. kết quả truy vấn

EDIT 2: Sau khi tôi sử dụng FIND_IN_SET() theo đề xuất của Kickstart, kết quả như mong đợi:

CHỌN * TỪ `view_test` 
NỐI BÊN TRONG
(
CHỌN GROUP_CONCAT(DISTINCT entity_id) LÀ idsgroup TỪ `view_test` Ở ĐÂU (tên_thuộc_tính = 'sku') NHÓM THEO tên_giá_trị GIỚI HẠN 0, 3
) ràng buộc
TRÊN FIND_IN_SET(entity_id, bind.idsgroup);

Kết quả đúng

câu trả lời hay nhất

Cách khắc phục đơn giản có vẻ là sử dụng FIND_IN_SET để kết nối. Nhưng nó hơi cồng kềnh và sẽ không nhanh như vậy.

LỰA CHỌN * 
TỪ `view_test`
NỐI BÊN TRONG
(
CHỌN GROUP_CONCAT(DISTINCT entity_id) NHƯ idsgroup
TỪ `view_test`
NƠI (tên_thuộc_tính = 'sku')
NHÓM THEO value_name
GIỚI HẠN 0, 3
) ràng buộc
TRÊN FIND_IN_SET(entity_id, bind.idsgroup);

Không chắc tại sao truy vấn phụ lại có GIỚI HẠN, đặc biệt là không có mệnh đề đặt hàng.

Tốt hơn hết bạn nên sử dụng truy vấn con để lấy DISTINCTEntity_id với sku attribute_name và tham gia vào chúng.

LỰA CHỌN * 
TỪ `view_test`
NỐI BÊN TRONG
(
CHỌN DISTINCT entity_id
TỪ `view_test`
NƠI (tên_thuộc_tính = 'sku')
) ràng buộc
TRÊN view_test.entity_id = bind.entity_id

Về php - Mysql group_concat(id) làm id trong left join và sử dụng id để chọn tất cả các cột trong nhóm id, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/40650205/

29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress