10/10/2018, 10:35

Hỏi về cách insert dữ liệu!

Mình có 1 bài toán thế này.
Mình có 1 table sản phẩm với field mặc định là proid, yêu cầu là người dùng có thể tự tạo các field, sửa xóa các field mới trong table này. Vấn đề là mình không biết lấy giá trị của các field mới này khi thêm mới, sửa sản phẩm. Ai biết help mình với nhé!
lamsononline viết 12:44 ngày 10/10/2018
sửa được cấu trúc thì phải có cách đọc cấu trúc ra. 1 là dùng hàm hỗ trợ bởi ngôn ngữ lt, 2 là đọc thẳng từ table hệ thống trong csdl
thuyduongcd viết 12:40 ngày 10/10/2018
Dùng SELECT * để lấy thông tin tất cả các field. Kết quả là 1 mảng 2 chiều.
Sau đó dùng hàm array_keys() hoặc for each để lấy tên các field.
megaownage viết 12:43 ngày 10/10/2018
Chủ đề này chủ yếu hỏi về SQL, CSDL hay lập trình Web?

Câu hỏi:
----------
Bảng X
T1: int (id)
T2: varchar | int | datetime | ... anything
----------
In ra
T1 T2
01 Dòng thứ nhất
02 54321
03 25/06/2010

Làm sao có thể chứa nhiều loại dữ liệu khác nhau vào cùng một bảng? Chả nhẽ sau khi người dùng thay đổi trường thì các dòng dữ liệu trước đó hết đọc luôn à?

Việc thực hiện nhiều loại dữ liệu chồng lên nhau trên thực tế có thể thực hiện được nhưng hoàn toàn không phải chuyện đơn giản.

Nếu thực sự bắt buộc phải làm thì nên tra cứu cách sử dụng variant field (MS SQL Server 2000+). Giải thích cái này dài lắm, không nói hết ở đây được.

Gặp loại QL CSDL không cho phép dùng variant thì phải tự nhái bằng cách lập một trường mã (dùng byte cho ngắn) và một trường chứa (varchar())
VD
Mã: 1=int, 2=date, 3=string, ...
Chứa: Đổi dữ liệu ra string và chứa vào trường này. Khi sử dụng thì đổi lại thành dạng ban đầu.

Lưu ý:
Nên nhớ rằng điều kiện căn bản của CSDL liên kết là các dòng của một bảng phải cùng một dạng. Cho phép thay đổi dạng chúng có nghĩa là chơi trò ép uổng. Quy trình thiết kế kiểu này cần được đặt một dấu chấm hỏi!
notnhacxanh viết 12:48 ngày 10/10/2018
Vấn đề mình hỏi là về PHP

Còn như bạn nói thì mình xin giải thích là người dùng sẽ không thay đổi được thuộc tính của field, chỉ có thể thay đổi tên, xoá, và ẩn đi thôi nên vấn đề có lẽ sẽ đơn giản hơn.
megaownage viết 12:38 ngày 10/10/2018
Viết một dynamic Query với nhiệm vụ tạo ra 'view' để nhìn vào bảng. Như vậy người sử dụng sẽ nhìn thấy bảng theo chiều hướng mà view tạo ra. Nhớ là phải có cách delete views.

Cách dễ nhất có lẽ là tạo ra nhiều mẫu view sẵn, người dùng chọn một view hợp ý nhất.
notnhacxanh viết 12:37 ngày 10/10/2018
Được gửi bởi megaownage
Viết một dynamic Query với nhiệm vụ tạo ra 'view' để nhìn vào bảng. Như vậy người sử dụng sẽ nhìn thấy bảng theo chiều hướng mà view tạo ra. Nhớ là phải có cách delete views.

Cách dễ nhất có lẽ là tạo ra nhiều mẫu view sẵn, người dùng chọn một view hợp ý nhất.
Hướng của mình giải quyết là sẽ tạo một table fields để chứa các trường tự tạo này, khi thêm mới 1 dòng vào table fields thì sẽ đồng thời ALTER 1 field vào table product
lamsononline viết 12:38 ngày 10/10/2018
dùng xml làm đặc tả là ngon lành
notnhacxanh viết 12:41 ngày 10/10/2018
Dữ liệu sẽ lớn nên không thể làm xml được, giống như 1 thư viện mà!
lamsononline viết 12:37 ngày 10/10/2018
xml dùng làm "đặc tả", nghĩa là mô phỏng cấu trúc, không có nghĩa là dùng xml để chứa dữ liệu insert vô. Từ xml còn có thể làm nhiều thứ khác, sinh ra giao diện quản lý,...chuyển đổi sang các đinh dạng khác, hoặc thích thì viết cái xsl transform qua bất kỳ database nào cũng được, rất tổng quát
Bài liên quan
0