Vấn đề là MySQL không có một cách tốt để liệt kê các hàng. Việc sử dụng hằng số không được đảm bảo hoạt động, than ôi, theo tài liệu MySQL. Nó thường hoạt động, nhưng nó cũng có thể có vấn đề.
Tôi khuyên bạn nên ghép các tên lại với nhau thành một trường duy nhất. Kết quả sẽ giống như sau:
1 tree,rose
2 tree
3 tree,bush,rose
Sử dụng SQL:
select plantid, group_concat(name separator ',')
from t
group by plantid
Nếu bạn thực sự muốn có tên trong các cột riêng biệt, hãy nghĩ đến hai tùy chọn. Một là sử dụng kết quả từ phía trên và sau đó phân tích kết quả thành các chuỗi riêng biệt. Cách thay thế khác là sử dụng phép tự kết hợp và tổng hợp để tính toán một số tuần tự, như sau:
select p.plantid, p.name, count(*) as seqnum
from t p left outer join
t pprev
on p.plantid = pprev.plantid and
p.name >= pprev.name
group by p.plantid, p.name
Và sử dụng điều này làm truy vấn con.